临界区是一段代码,一次只允许一个线程执行这段代码。当把一段代码放入一个临界区, 线程执行到临界区时就独占了, 其他线程如果要访问这段代码,一定要等前一个访问的线程结束才行。借用前面的比喻比作图书馆,临界区就像把图书馆设计成只有一个位置(现实中好像不太合理,不管了,反正这么个意思),当有一个人正在办理业务时,其他人只能等待那个人办完业务才能进去。
使用临界区的步骤:
1、声明一个TRLCriticalSection记录类型的变量如CS,必须是全局的;
2、使用前先初始化:InitializeCriticalSection(CS);
3、EnterCriticalSection(CS); 线程进入临界区,其他线程需要等待
4、LeaveCriticalSection(CS); 线程离开临界区,其他线程可以访问了
5、DeleteCriticalSection(CS); 最后删除临界区
重写前文的例子,如下:
OK,可以看到线程是依次执行的了。
临界区只用于进程内,是相当轻量级的,当没有线程冲突时,进入或离开临界区大概只需要10到20个时钟周期
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/asciil/archive/2009/07/17/4355961.aspx