您當前的位置:首頁 > 遊戲

C:訊號量和互斥量

作者:由 大川搬磚 發表于 遊戲時間:2022-09-20

訊號量

訊號量(semaphore),重點在

訊號

,是一種訊號機制 —— “我已經把事情幹好了,下面該你了”。典型的生產者——消費者模型。是協調任務執行順序的一種機制。比如有兩個任務 A 和 B。任務 A 在執行兩個數的加法運算,任務 B 需要用任務 A 運算的結果去執行乘法運算。此時,在任務 A 沒有完成之前,任務 B 必須等待。當任務 A 完成後,使用訊號量通知任務 B 去取結果。

互斥量

互斥量(mutex),重點在

互斥

,是一種鎖機制——”現在這個東西歸我,等我用完你們才能用,現在你們都得等著“。比如有兩個任務 A 和 B,一個檔案描述符。A 和 B 都向檔案中寫入資料。如果同時寫入,那麼會導致檔案內容紊亂,此時就需要鎖機制。對檔案描述符加鎖。佔有鎖的任務可以執行寫入操作。如果另一個任務也想寫入資料,那麼它必須先獲得鎖。如果測試鎖被佔用,那麼它必須等待鎖可用後才能寫入資料。

不同點

所有者不同:

訊號量:一個任務可以只獲取(釋放)訊號量。獲取訊號量的任務不必非得釋放訊號量,反之亦然;

互斥量:佔有互斥量的任務負責釋放互斥量;

優先順序反轉問題:

雖然二值訊號量可以實現互斥量的功能(很多人這麼用),但是訊號量沒有實現防止優先順序反轉的功能。互斥量可以使用優先順序繼承和天花板策略防止優先順序反轉。

總結

要專項專用。訊號量用於“通知”,互斥量用於“鎖”。

參考

https://

stackoverflow。com/quest

ions/62814/difference-between-binary-semaphore-and-mutex#

Mutex vs。 Semaphores – Part 1: Semaphores

Mutex vs。 Semaphores – Part 2: The Mutex

Mutex vs。 Semaphores – Part 3: Mutual Exclusion Problems