1. 程式人生 > >多執行緒同步互斥的四個實現方法圖

多執行緒同步互斥的四個實現方法圖

一、引言

這篇文章記錄是來源於Windows多執行緒系列的學習筆記,表為原創,實為轉載文章,只是為了讓自己學的明白,稍微整理了下而已,在此向“MoreWindows”大神致敬!

二、關鍵段與互斥量Mutex

名稱 建立或初始化 銷燬 進入互斥區域 離開互斥區域
關鍵段CS InitializeCritialSection DeleteCriticalSection EnterCriticalSection LeaveCriticalSection
互斥量Mutex CreateMutex CloseHandle 等待系列函式如WaitForSingleObject ReleaseMutex

關鍵段與互斥量都有“執行緒所有權”概念,可以將“執行緒所有權”理解成旅館的房卡,在旅館前臺登記名字擁有房卡後是可以多次進出房間的,其它人則無法進入直到你交出房卡。每個執行緒必須先通過EnterCriticalSection或WaitForSingleObject來嘗試獲得“執行緒所有權”才能呼叫LeaveCriticalSection或ReleaseMutex。否則會呼叫失敗,這就相當於偽造房卡去辦理退房手續——由於登記本上沒有你的名字所以會被拒絕。

三、事件Event

名稱 建立 銷燬 使事件觸發 使事件未觸發
事件Event CreateEvent CloseEvent SetEvent ResetEvent

注意事件的手動置位和自動置位要分清楚,不要混淆了

四、訊號量Semaphore

名稱 建立 銷燬 遞減計數 遞增計數
訊號量Semaphore CreateSemaphore CloseHandle 等待系列函式如WaitForSingleObject ReleaseSemaphore

訊號量在計數大於0時表示觸發狀態,呼叫WaitForSingleObject不會阻塞,等於0表示未觸發狀態,呼叫WaitForSingleObject會阻塞知道有其它執行緒遞增了計數