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() |
MsgWaitForMultipleObjects() 代表 mutex 處於非激發狀態,執行緒擁有 mutex,進入blocking 狀態 |
| LeaveCriticalSection() | ReleaseMutex() 代表 mutex 處於激發狀態,執行緒釋放 mutex,停止執行 |