//申明临界区变量
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 |