Delphi中的线程类--之(4)Delphi中的线程类 猛禽[Mental Studio] http://mental.mentsu.com
之四 临界区( CriticalSection)则是一项共享数据访问保护的技术。它其实也是相当于一个全局的布尔变量。但对它的操作有所不同,它只有两个操作:Enter和Leave,同样可以把它的两个状态当作True和False,分别表示现在是否处于临界区中。这两个操作也是原语,所以它可以用于在多线程应用中保护共享数据,防止访问冲突。用临界区保护共享数据的方法很简单:在每次要访问共享数据之前调用Enter设置进入临界区标志,然后再操作数据,最后调用Leave离开临界区。它的保护原理是这样的:当一个线程进入临界区后,如果此时另一个线程也要访问这个数据,则它会在调用Enter时,发现已经有线程进入临界区,然后此线程就会被挂起,等待当前在临界区的线程调用Leave离开临界区,当另一个线程完成操作,调用Leave离开后,此线程就会被唤醒,并设置临界区标志,开始操作数据,这样就防止了访问冲突。 以前面那个InterlockedIncrement为例,我们用CriticalSection(Windows API)来实现它: Var InterlockedCrit : TRTLCriticalSection;
上一篇:Delphi中的线程类--之(3) 下一篇:Delphi中的线程类--之(5,大结局) 更多相关文章
|
推荐文章
精彩文章
|