标题: 浅谈临界区 [打印本页]

作者: liuyang    时间: 2012-1-11 20:34
标题: 浅谈临界区
     我查找了资料,然后按自己的理解,吧它写下来,如果新手看见了也可以了解下。 关于多线程同步有很多办法,像临界区,互斥对象,事件等等 ,临界区不属于内核对象其他的属于内核对象,临界区只能应许一个线程进入临界区,其他线程在发现临界区被占,就会让出CPU而非等待时间片再次切换,这就 是区别。但是临界区同步很快,所以尽量在需要的地方执行时间短的代码段加上。它的一般用法

//申明临界区变量

CRITICAL_SECTION cSec;

//初始化临界区变量

InitializeCriticalSection(&cSec);

//进入临界区
EnterCriticalSection(&cSec);

LeaveCriticalSection(&cSec);

注意:凡是需要同步的线程都需要加上 EnterCriticalSection(&cSec);LeaveCriticalSection(&cSec);  因为其他线程需要在EnterCriticalSection()后才能获知是否有线程占用临界区,如果被占让出CPU,进入和离开临界区必须是一起的, 否则线程就一直被一个线程占用。还有值得注意的是这个缺点是,一个进入临界区的线程如果假死的话,那么这程序荡掉了,所以有时候还要做点处理,至于怎么做 才查下资料吧。

  像其他内核对象,和这边原理也差不多,先把一个对象给一个线程,其他线程必须等待那个对象是否已经释放,否则线程就在那占着CPU空等。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1