一直不是很搞的清楚線程同步與資源互斥,不過好像這兩個也是一個統一的內容。
1.創建線程
線程同步首先要有多線程爲前提,如何創建線程:CreateThread函數(如果下文不需要引用句柄,可以提前關閉)
2.互斥對象(可以用來保護要操作的資源)
a.實例化互斥對象 HANDLE hMutex
b.CreateMutex
c. WaitforSingleObject
msdn對他的解釋,作用爲:I. The specified obj is in he signaled state
II. The time-out interval elapses
在這兩種情況下,都會返回互斥對象句柄,否則的話,線程一直等待
d. ReleaseMutex
注:互斥對象只有擁有者纔有釋放權限
計數器 :1 擁有 +1
2 wait +1
3 Release -1 計數值爲0 的時候纔可以請求到互斥對象
若線程獲得互斥對象擁有權,但是線程結束沒有釋放,系統會自動釋放 -1,也可以通過wait函數的返回值來判斷
3.事件對象(有信號才能獲得)
a. 實例化 HANDLE gEvent
b.gxxx=CreateEvent();
c.SetEvent(設置有信號)
d.ResetEvent(設置無信號)
注:所有事件都可以請求到信號,在人工事件設置有信號狀態下
自動重置事件是同步事件的一般做法通過,參數設置+ResetEvent來實現
4. 關鍵代碼段
a. 設置全局CRITICAL_SECTION gCs
b. InitialCriticalSection()
通過EnterCriticalSection和LeaveCriticalSection來實現關鍵代碼段
c.DeleteCriticalSection()