節錄至 Multithreading Applications in Win32
鎖住一個未被擁有的 mutex,比鎖住一個未被擁有的 critical section,需要花費幾乎100倍的時間。因為 critical section 不需進入作業系統核心,直接在 user mode 就可以進行動作。
Mutex 可以跨行程使用。Critical section 則只能在同一個行程使用。
等待一個 mutex 時,可以指定「結束等待」的時間長度,而 critical section 不行。
兩者相關函式比較:
CRITICAL_SECTION (非核心物件)
Mutex 核心物件
InitializeCriticalSection()
CreateMutex() , OpenMutex()
EnterCriticalSection()
WaitForSingleObject() WaitForMultipleObject() MsgWaitForMultipleObjects() 代表 mutex 處於非激發狀態,執行緒擁有 mutex,進入blocking 狀態
LeaveCriticalSection()
ReleaseMutex() 代表 mutex 處於激發狀態,執行緒釋放 mutex,停止執行
引述於 http://evotalk.net/blog/?s=mutex
沒有留言:
張貼留言