2010年1月6日 星期三

Critical Section vs Mutex

節錄至 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