1、 事件(Event):是WIN32提供的最靈活的線程間同步方式。
使用方法:
用CreateEvent創建壹個事件。對於需要手工設置的事件,在需要該事件或者事件發生時,采用SetEvent及ResetEvent來進行設置。
2、臨界區(Critical section):防止多個線程同時執行壹個代碼段。
使用方法:
1) 需要設置臨界區時,要先定義臨界區對象,采用CRITICAL_SECTION g_cs;
2) 使用前需初始化臨界區,采用InitializeCriticalSection(&g_cs);函數
3) 需要進入臨界區時,采用:EnterCriticalSection(&g_cs);函數,從而阻止其他的線程進入。
4) 離開臨界區時,采用:LeaveCriticalSection(&g_cs);,從而讓其他的線程可以進入該臨界區。
5) 當該臨界區不再有使用價值時,需銷毀臨界區,采用:DeleteCriticalSection(&g_cs);
3、互斥量(Mutex):互斥量通常用於協調多個線程或進程的活動,控制對資源的“鎖定”和“取消鎖定”,從而控制對***享資源的訪問。
使用方法:
1) 首先,建立互斥體對象,得到句柄使用HANDLE CreateMutex()函數;
2) 然後,在線程可能產生沖突的區域前調用WaitForSingleObject函數,將句柄傳給函數,請求占用互斥對象:dwWaitResult = WaitForSingleObject(hMutex,5000L);
3) ***享資源訪問結束,釋放對互斥體對象的占用:ReleaseMutex(hMutex);
4) 最後使用CloseHandle函數刪除互斥體對象。
4、信號量(Semaphore):信號對象允許多個有限個數的線程同時訪問***享資源。
使用方法:
1) 當需要信號量時要先調用CreateSemaphore函數創建信號量
2) 在需要請求資源時,調用WaitForSingleObject函數或者WaitForMultipleObject函數等待信號量。
3) 資源使用完畢後,調用ReleaseSemaphore函數釋放信號量