假設我在內存中有一個數據結構S. S很複雜,比如樹或圖。我有兩個線程穿過S,他們可能會碰到並嘗試同時讀取相同的地址。我的問題是:是否有任何在這一點上的隱式鎖定的類型,使線程之間的爭用產生?如果它是有價值的,我在普通的SMP機器上使用C,pthreads。閱讀是否涉及多線程應用程序中的任何鎖定?
3
A
回答
3
不需要使用只讀操作進行鎖定。
如果你明確地實現它,只會有鎖定。這通常會在另一個線程同時修改(寫入)結構的時候完成。
0
如果沒有修改,讀取總是線程安全的。
0
首先,在C中沒有隱式鎖定。C是一個「這裏是繩索」語言,因爲你總是可以自由地掛上自己。
此外,請注意,沒有鎖定的閱讀是安全的,當你是從來沒有寫作。如果你改變了這些數值,那麼讀數可能會導致你錯誤的數值。
最後,兩個很酷的工具可幫助您決定在不確定時是否需要鎖定DRD和helgrind(valgrind工具)。這兩種都是線程工具,可以檢測各種線程相關的錯誤。只要知道他們會在敏感方面犯錯。
相關問題
- 1. SQL INSERT是否涉及任何讀/寫鎖?
- 2. MQ鎖定減慢閱讀器程序
- 3. 當win7被鎖定時,多線程應用程序會永久循環是否有任何理由?
- 4. 多線程以及多進程的Java文件鎖定方式
- 5. 如何確定線程是否有鎖?
- 6. 理想的線程結構問題(涉及多線程通信)
- 7. 如何在我的應用程序中啓用離線閱讀?
- 8. 鎖定Web客戶端 - 多線程應用程序
- 9. 多線程程序中的鎖()
- 10. 如何在我的應用程序中實現離線閱讀
- 11. 是否有涉及事件處理的單獨線程?
- 12. PThreads:讀/寫鎖:如何檢查線程是否持有寫鎖?
- 13. 多線程應用程序中的靜態計數器線程是否安全?
- 14. 一位作家,無鎖應用程序中的多個閱讀器
- 15. Android - 如何閱讀應用程序類中的程序包名
- 16. 異步需要涉及多線程還是並行?
- 17. 多線程應用程序中的SQLite「數據庫已鎖定」錯誤
- 18. 如何確定應用程序是否是Web應用程序
- 19. 什麼是多線程應用程序?
- 20. 線程鎖定在大Parralel應用程序中
- 21. 鎖定多個線程
- 22. 無法鎖定簡單多線程程序中的錯誤
- 23. 如何在directshow應用程序中設置讀取鎖定和寫入鎖定?
- 24. 使用Drupal有多少涉及編程?
- 25. 如何調試掛起(死鎖)的C++中的多線程應用程序?
- 26. Java中的多線程應用程序?
- 27. 多線程應用程序中的SetCurrentDirectory
- 28. 多線程應用程序中的System.setproperty
- 29. 在我的應用程序中安裝Crystal - 涉及什麼?
- 30. Android鎖定應用程序