如果我需要同時調用兩個線程,這兩個線程都使用特定套接字上的send()函數調用函數,那麼對send()函數中的關鍵部分進行變形或使用互斥體進行調查會更有用嗎? (因爲套接字是內核對象)線程同步 - 臨界區或互斥鎖?
1
A
回答
1
我假設這是關於Windows(無法回想看到其他地方的關鍵部分)。
如果所有鎖定都在一個進程中,那麼確實使用哪個同步對象並不重要。如果你想跨進程邊界鎖定,那麼你應該使用互斥鎖,因爲臨界區只能在單進程內工作,但是可以在許多進程間共享名爲互斥鎖。
+3
實際上它很重要因爲互斥鎖是一個內核對象,並且需要更長的時間才能獲取它,當臨界區落入內核模式時僅等待它是否已被鎖定。否則(通常大多數情況下),它非常快。很久以前,我看到了數字,例如〜20個CPU指令來鎖定一個免費的臨界區和〜1000個CPU指令來獲得一個免費的互斥量。 –
-2
4
假設Windows平臺(這是我們在關鍵部分和互斥體之間進行選擇的地方)。
互斥鎖(CreateMutex
)速度較慢:即使沒有爭用,鎖定和解鎖始終是系統調用。但是,send
的成本可能足以使這種差異變得不明顯。
正如另一個答案指出的,互斥體可以在進程之間共享(如果命名/重新打開或繼承),並且關鍵部分是本地進程。
相關問題
- 1. C++部分互斥/臨界區段鎖
- 2. GCD臨界區/互斥
- 3. 鎖,互斥和臨界區之間的區別
- 4. Posix線程與互斥鎖的同步
- 5. C++中互斥鎖和臨界區之間的性能差異
- 6. 線程同步,互斥
- 7. Windows上的互斥鎖,臨界區等的代價
- 8. 多線程和互斥鎖
- 9. 多線程互斥鎖可以使用多個互斥鎖
- 10. 我可以使用互鎖操作更新多個值以避免鎖定臨界區/互斥量嗎?
- 11. 使用互斥鎖的pthread同步
- 12. 鎖定和同步使用互斥
- 13. 互斥體和臨界區之間的邊界是什麼?
- 14. 線程同步@原生Android
- 15. 線程在同一互斥鎖的多個鎖上的行爲
- 16. 同步和互斥
- 17. 互斥和同步的區別?
- 18. 互斥鎖和線程問題
- 19. C++多線程互斥鎖問題
- 20. 互斥鎖與pthread_join之間的區別
- 21. ASP.Net - 監視器/鎖或互斥
- 22. pthread_cond_wait不解鎖互斥鎖
- 23. 互斥或不互斥互斥?
- 24. 釋放互斥鎖。
- 25. 線程同步
- 26. 互斥鎖和鎖
- 27. pthread_getspecific和互斥鎖
- 28. 通過在C中使用互斥鎖和屏障進行線程同步
- 29. pthread互斥鎖兩個線程互鎖鎖定/解鎖是否有效?
- 30. Java中互斥線程的互斥量?
在某些操作系統上,send()調用本身已經是線程安全的。 – PlasmaHH