2011-02-10 133 views
4

我讀過互斥量和二進制信號量只有一個方面不同,在互斥體的情況下,鎖定線程必須解鎖,但在信號量中,鎖定和解鎖線程可以不同?信號量和互斥量在實現中有什麼區別?

哪一個更有效?

+0

[二進制信號量和互斥量之間的差異。](http://stackoverflow.com/questions/62814/difference-between-binary-semaphore-and-mutex)的可能的重複。另請參閱:[鎖,互斥體,信號量...有什麼區別?](http://stackoverflow.com/questions/2332765/),[什麼時候應該使用互斥體,什麼時候應該使用信號量](http:// stackoverflow。你在什麼情況下使用C++中的互斥信號?](http://stackoverflow.com/questions/2350544/)等等。 – 2011-02-10 04:55:17

回答

4

假設你知道sempahore和互斥之間的基本區別在於:

對於快速,簡單的同步,使用crticial部分。

要跨進程邊界同步線程,請使用互斥鎖。

要同步對有限資源的訪問,請使用信號量。

除了互斥鎖擁有所有者之外,這兩個對象可能會根據不同的用法進行優化。互斥體的設計只能保持很短的時間;違反此規定可能會導致性能不佳和不公平的調度。例如,即使另一個線程已經被阻塞,正在運行的線程可能被允許獲取互斥體。信號量可以提供更多的公平性,或者可以使用多個條件變量強制公平。

+0

通過「跨進程邊界」,做你的意思是說在兩個不同的進程下創建的兩個線程之間的同步化? – Pacerier 2011-12-08 15:57:30

相關問題