回答
在Windows臨界區(大部分)是在用戶模式下實現的,而互斥量會將上下文切換到內核模式(這很慢)。如果一個線程在擁有一個互斥體時終止,那麼互斥體就被認爲是被放棄了。互斥狀態設置爲發信號,下一個等待線程獲得所有權。在臨界區域的情況下,所有其他線程將保持阻塞狀態。關鍵部分無法命名,因此您無法使用它們來同步多個進程。
「關鍵部分完全在用戶模式下實現」< - 並非完全如此。如果他們有足夠的時間旋轉,關鍵部分會產生而不是旋轉。 – 2011-03-01 18:11:37
CriticalSections意思是過程。被稱爲互斥鎖可以跨進程使用
鎖是一個通用術語,因此我不知道你的意思是哪個平臺。例如在C#中,一個鎖原語是一個關鍵部分。
並且鎖也處於正確的狀態? – ckv 2010-05-11 07:02:28
1)臨界區是用戶和聯鎖操作之間的橋樑。它使用inetrlocked交換的操作來鎖定和解鎖你的線程。它的工作速度比互斥鎖快。
2)互斥鎖是一個內核對象。它工作不快,但有一些優點。首先,可以跨進程使用已命名的互斥鎖。其次,如果線程被終止,那麼由該線程鎖定的互斥鎖被解鎖。
關鍵部分不是內核對象。他們沒有與任何句柄標識。它們只能用於同步屬於同一進程的線程。它們不能在整個過程中用於同步。
CSingleLock(我假設你是指這是一個鎖,在這種情況下)是一個使用RAII概念的包裝類。它可以幫助您獲取線程同步對象(在其構造函數中),並以簡單的方式調用鎖定和解鎖API。 (隱藏它使用的同步對象的所有內部細節)。
CSingleLock與Critical部分一起使用時,不能跨進程使用。互斥體可以用於此目的。
當線程獲取互斥鎖並且沒有其他線程可以獲取互斥鎖時,則說互斥鎖的狀態處於非鎖定狀態。 如果互斥鎖可用且沒有線程獲取,則它處於Signeled狀態。
- 1. C++中互斥鎖和臨界區之間的性能差異
- 2. 互斥鎖與pthread_join之間的區別
- 3. C++部分互斥/臨界區段鎖
- 4. 互斥體和臨界區之間的邊界是什麼?
- 5. GCD臨界區/互斥
- 6. 鎖定和互鎖之間的區別
- 7. Windows上的互斥鎖,臨界區等的代價
- 8. 線程同步 - 臨界區或互斥鎖?
- 9. 互斥和同步的區別?
- 10. 比賽和死鎖之間的區別
- 11. 監視器和鎖之間的區別?
- 12. 我可以使用互鎖操作更新多個值以避免鎖定臨界區/互斥量嗎?
- 13. 互斥鎖和鎖
- 14. 臨時表之間的區別
- 15. 共享互斥和互斥之間的區別(爲什麼都存在於C++ 11併發中)?
- 16. SQL臨時數據庫,臨時表和表之間的區別
- 17. 互斥和條件變量之間的決定性區別是什麼?
- 18. 棘手聯鎖減值與臨界區
- 19. 之間的〜/和的區別../
- 20. 臨界區
- 21. 嵌套鎖和簡單鎖之間的區別
- 22. 鎖定(this)和靜態對象鎖定之間的區別
- 23. pthread_getspecific和互斥鎖
- 24. 類區域和堆之間的區別
- 25. '#','%'和'$'之間的區別
- 26. {!!之間的區別!!}和{{}}
- 27. '+ ='和'= +'之間的區別?
- 28. 「。+」和「。+?」之間的區別
- 29. .eq之間的區別。和==
- 30. #。/和#之間的區別。 ./
他們對我來說是一樣的,我的猜測是你正在使用一個庫,這使得三者之間有所不同(Win32?)。 – 2010-05-11 06:56:39
你是說像CSingleLock這樣的鎖在線程跨進程時也支持線程同步。我認爲只有Mutex支持。如果我錯了,請糾正我的錯誤 – ckv 2010-05-11 06:59:43