Delphi中的线程类--之(4)[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 raptor 的 blog

delphi中的线程类

 

猛禽[mental studio]

http://mental.mentsu.com

 

之四

临界区(criticalsection)则是一项共享数据访问保护的技术。它其实也是相当于一个全局的布尔变量。但对它的操作有所不同,它只有两个操作:enterleave,同样可以把它的两个状态当作truefalse,分别表示现在是否处于临界区中。这两个操作也是原语,所以它可以用于在多线程应用中保护共享数据,防止访问冲突。

用临界区保护共享数据的方法很简单:在每次要访问共享数据之前调用enter设置进入临界区标志,然后再操作数据,最后调用leave离开临界区。它的保护原理是这样的:当一个线程进入临界区后,如果此时另一个线程也要访问这个数据,则它会在调用enter时,发现已经有线程进入临界区,然后此线程就会被挂起,等待当前在临界区的线程调用leave离开临界区,当另一个线程完成操作,调用leave离开后,此线程就会被唤醒,并设置临界区标志,开始操作数据,这样就防止了访问冲突。

以前面那个interlockedincrement为例,我们用criticalsectionwindows api)来实现它:

var

  interlockedcrit : trtlcriticalsection;

本文关键:Thread Event CriticalSection Synchronize
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top