Mutex
繼承: RefCounted < Object
二元 Semaphore,用於在多 Thread 間進行同步。
說明
同步互斥器(mutex 來源於 mutual exclusion,即互斥)。可用於在多 Thread 間進行同步,等價於二元 Semaphore。能夠確保同時只有一個執行緒能夠存取臨界區。
這是一種可重入的互斥器,也就是說同一個執行緒能夠將其多次上鎖,只要也進行相同次數的解鎖即可。
警告:互斥器必須謹慎使用才能避免鎖死。
警告:為了能夠正確清理,避免當機和鎖死,必須滿足以下條件:
Mutex 的引用計數到達零,將被銷毀時,必須沒有執行緒將其鎖定(包括發生解構的執行緒)。
Thread 的引用計數達到零,將被銷毀時,必須沒有鎖定任何互斥器。
教學
方法
void |
lock() |
try_lock() |
|
void |
unlock() |
方法說明
void lock() 🔗
鎖定此 Mutex,直到被目前所有者解鎖為止。
注意:如果執行緒已經擁有互斥鎖的所有權,該函式將無阻塞地返回。
嘗試鎖定該 Mutex,但不會阻塞。成功時返回 true,否則返回 false。
注意:如果該執行緒已經擁有了該互斥器的所有權,則函式返回 true。
void unlock() 🔗
解鎖該 Mutex,將其留給其他執行緒。
注意:如果一個執行緒在已經擁有互斥器的情況下多次呼叫 lock() 或 try_lock(),則也必須呼叫相同次數的 unlock() 才能正確解鎖。
警告:在給定的執行緒中呼叫 unlock() 的次數超過呼叫 lock() 的次數,導致嘗試解鎖未加鎖的互斥器,是錯誤的行為,可能引起當機和鎖死。