Mutex

繼承: RefCounted < Object

二元 Semaphore,用於在多 Thread 間進行同步。

說明

同步互斥器(mutex 來源於 mutual exclusion,即互斥)。可用於在多 Thread 間進行同步,等價於二元 Semaphore。能夠確保同時只有一個執行緒能夠存取臨界區。

這是一種可重入的互斥器,也就是說同一個執行緒能夠將其多次上鎖,只要也進行相同次數的解鎖即可。

警告:互斥器必須謹慎使用才能避免鎖死。

警告:為了能夠正確清理,避免當機和鎖死,必須滿足以下條件:

  • Mutex 的引用計數到達零,將被銷毀時,必須沒有執行緒將其鎖定(包括發生解構的執行緒)。

  • Thread 的引用計數達到零,將被銷毀時,必須沒有鎖定任何互斥器。

教學

方法

void

lock()

bool

try_lock()

void

unlock()


方法說明

void lock() 🔗

鎖定此 Mutex,直到被目前所有者解鎖為止。

注意:如果執行緒已經擁有互斥鎖的所有權,該函式將無阻塞地返回。


bool try_lock() 🔗

嘗試鎖定該 Mutex,但不會阻塞。成功時返回 true,否則返回 false

注意:如果該執行緒已經擁有了該互斥器的所有權,則函式返回 true


void unlock() 🔗

解鎖該 Mutex,將其留給其他執行緒。

注意:如果一個執行緒在已經擁有互斥器的情況下多次呼叫 lock()try_lock(),則也必須呼叫相同次數的 unlock() 才能正確解鎖。

警告:在給定的執行緒中呼叫 unlock() 的次數超過呼叫 lock() 的次數,導致嘗試解鎖未加鎖的互斥器,是錯誤的行為,可能引起當機和鎖死。