前言:
使用多線程時,必須學會對臨界區加鎖。所謂臨界區是一種輕量級的機制,在某一時間內只允許一個線程執行特定的代碼段。這樣的話,在使用多線程的時候,必須提出一種保護機制來控制臨界區的訪問,這種保護機制就是鎖。
C++對臨界區加鎖方法:
CRITICAL_SECTION g_cs; //臨界區聲明
InitializeCriticalSection(&g_cs); //初始化鎖
EnterCriticalSection(&g_cs);//進入臨界區域
{
臨界區訪問代碼段;
.......
}
LeaveCriticalSection(&g_cs);//離開臨界區
DeleteCriticalSection(&g_cs); //刪除臨界區
其它知識:
線程進入臨界區的調度原則是什麼?
①如果有若干線程要求進入空閒的臨界區,一次僅允許一個線程進入。
②任何時候,處於臨界區內的線程不可多於一個。如已有線程進入自己的臨界區,則其它所有試圖進入臨界區的線程必須等待。
③進入臨界區的線程要在有限時間內退出,以便其它線程能及時進入自己的臨界區。
④如果線程不能進入自己的臨界區,則應讓出CPU,避免線程出現“忙等”現象。
如果有多個線程試圖同時訪問臨界區,那麼在有一個線程進入後其他所有試圖訪問此臨界區的線程將被掛起,並一直持續到進入臨界區的線程離開。臨界區在被釋放後,其他線程可以繼續搶佔,並以此達到用原子方式操作共享資源的目的。