//申明臨界區變量
CRITICAL_SECTION cSec;
//初始化臨界區變量
InitializeCriticalSection(&cSec);
//進入臨界區
EnterCriticalSection(&cSec);
LeaveCriticalSection(&cSec);
注意:凡是需要同步的線程都需要加上 EnterCriticalSection(&cSec);LeaveCriticalSection(&cSec); 因為其他線程需要在EnterCriticalSection()后才能獲知是否有線程占用臨界區,如果被占讓出CPU,進入和離開臨界區必須是一起的, 否則線程就一直被一個線程占用。還有值得注意的是這個缺點是,一個進入臨界區的線程如果假死的話,那么這程序蕩掉了,所以有時候還要做點處理,至于怎么做 才查下資料吧。
像其他內核對象,和這邊原理也差不多,先把一個對象給一個線程,其他線程必須等待那個對象是否已經釋放,否則線程就在那占著CPU空等。| 歡迎光臨 (http://www.denmoz.com/bbs/) | Powered by Discuz! X3.1 |