假設變量在讀取過程中沒有被修改的風險,那麼在一個變量被同時讀取2個或更多的線程中是否存在固有的問題?是變量線程安全的同時讀取?
15
A
回答
9
如果你的假設成立,那就沒有問題了。
0
鑑於數據庫通常可以使用shared read locks,其中任何數量的客戶端可能會讀取同一個塊,我建議不存在直接的固有問題。
0
有三個字符。
編輯: 哎呦。是的,它是線程安全的。不,沒有問題。人們通常會問是否線程安全,而不是線程不安全。
3
只要它是一個簡單的變量,就沒有風險。
如果它是一個屬性,閱讀它可能會有副作用,所以不能保證是線程安全的。
7
沒有這種操作本質上不是線程安全的。
儘管變量當前未被寫入,但以前對該變量的寫入操作可能對所有線程都不可見。這意味着兩個線程可以讀取相同的值並獲得不同的結果,從而創建競爭條件。
這可以通過內存障礙,正確使用volatile或其他一些機制來防止。我們需要更多地瞭解您的環境,特別是語言,以給出完整的解釋。
稍微重申一下你的問題,雖然會產生更好的答案。假設沒有更多寫入,並且所有先前的寫入對當前線程都是可見的,那麼從多個線程讀取值是安全的。
相關問題
- 1. 將變量同時更新爲同一值的線程安全
- 2. 一個線程讀取和另一個寫入volatile變量 - 線程安全?
- 3. VB.NET中的線程安全變量
- 4. 線程安全:Ruby中的類變量
- 5. 線程安全的熊貓變量
- 6. 線程中線程安全的可變變量?
- 7. java變量本身是否線程安全?何時更新變量?
- 8. 線程安全,防止變量更新
- 9. Kotlin局部變量線程安全
- 10. Ruby線程安全類變量
- 11. 裝配 - 線程安全局部變量
- 12. 領域快速線程安全變量
- 13. 字典作爲線程安全變量
- 14. WebService成員變量和線程安全
- 15. C++多線程安全局部變量?
- 16. 線程能否安全地讀取由VCL事件設置的變量?
- 17. 只讀線程安全
- 18. 是否爲線程更新了公共靜態變量? (是線程安全的?)
- 19. 多線程定期更新全局變量,同時第三個線程等待讀取
- 20. 從不同線程讀取和寫入相同變量時的硬件狀態
- 21. 「變量不是函數」錯誤,同時讀取挖空變量
- 22. Rails中類變量的線程安全性 - 這是否可行?
- 23. 如何確保共享變量是線程安全的?
- 24. 是否有線程安全類變量的C++標準?
- 25. 這是ASP.net中的靜態變量線程安全c#
- 26. 多線程讀取靜態對象是否安全?
- 27. 從多線程讀取int是否安全?
- 28. 查找安裝的PHP是線程安全的還是非線程安全的?
- 29. 多個線程讀取一個變量
- 30. std ::向量,線程安全,多線程
如果他的假設成立,問題不是問題嗎? (它可能不會,請參閱guffa的答案:http://stackoverflow.com/questions/3033425/are-simultaneous-reads-of-a-variable-thread-safe/3033439#3033439) – Kris 2010-06-13 18:48:08
即使目前沒有寫入,前一個權利可能尚未對所有創建競賽條件的線索都可見。查看我的答案瞭解更多詳情。 – JaredPar 2010-06-13 19:02:07
@Kris,@JaredPar:確實如此,但我正在回答OP所述的問題。 :-) – 2010-06-13 19:17:12