沒有任何線程會修改變量。他們都在閱讀。這安全嗎?多線程讀取靜態對象是否安全?
回答
這取決於你的線程正在共享什麼資源。請看下面的例子:
public class MyClass
{
private int i;
public int Foo { get { return i++; } }
}
public static class SharedResources
{
public static const string SharedString;
public static readonly MyClass SharedMyClass;
}
在此代碼示例,參考到SharedString
是線程安全的,因爲字符串是隻讀的在C#。但是,任何線程可能隨時調用SharedResources.SharedMyClass.Foo
,並且由於增量不是線程安全的(除非使用Interlocked.Increment
),讀取此屬性的線程可能會得到不一致的結果。
總之,如果一個類的公共API是隻讀的,但其內部不是線程安全的,那麼不安全的只是有多個線程讀取它。
爲了出現併發錯誤,至少有一個訪問必須是寫入/修改的。
小心不要把getters弄錯一個變量。他們可能會有訪問時不知道的含義。
死鎖是併發錯誤嗎?如果一個或多個讀取觸發了一個需要鎖定的靜態構造函數,只有讀取才會發生死鎖。, – 2013-03-24 05:23:25
好的,我的答案沒有考慮死鎖,只考慮了競爭條件。 Thx。他們肯定是併發錯誤! – Sebastian 2013-03-24 05:24:34
- 1. 線程安全對象 - 是否靜態?
- 2. 遍歷(讀取)靜態DOM文檔對象是否線程安全?
- 3. 靜態對象線程安全
- 4. 靜態委託是否線程安全?
- 5. GridFS Java對象是否線程安全?
- 6. 本地靜態變量和多線程 - 是否安全?
- 7. 多線程應用程序中的靜態計數器線程是否安全?
- 8. 是靜態方法線程安全
- 9. 是靜態方法線程安全的
- 10. 是靜態類線程安全
- 11. 從多線程讀取int是否安全?
- 12. 靜態類是否是線程安全的
- 13. 存儲在線程安全集合線程中的對象是否安全?
- 14. 是否爲線程更新了公共靜態變量? (是線程安全的?)
- 15. 這些私有靜態成員是否線程安全?
- 16. 對象成員對於Callable&ExecutorService是否是線程安全的
- 17. 公共靜態類中的非靜態成員是否線程安全?
- 18. 對象只被多個線程讀取,是否需要同步
- 19. 鎖(objlocker)是否使該對象線程安全的應用程序廣泛?並且靜態成員是否自動線程安全?
- 20. 從多個線程寫入靜態數據實際上是否安全
- 21. 當鏈接到非線程靜態庫時,IPP線程是否安全?
- 22. 是一個靜態對象的線程的返回值在Java安全
- 23. EF對象是線程安全的嗎?
- 24. 什麼是線程安全的對象
- 25. 一個對象是否可以說是線程安全的?
- 26. 正在從XmlDocument對象讀取線程安全嗎?
- 27. Python:安全地讀取線程中的對象的值?
- 28. 靜態方法和線程安全
- 29. Java靜態和線程安全
- 30. Java靜態方法和線程安全
相關:http://stackoverflow.com/questions/2076461/how-does-c-sharp-guarantees-the-atomicity-of-read-write-operations – 2013-03-24 05:10:30
取決於變量的類型。 http://blogs.msdn.com/b/ericlippert/archive/2011/05/23/read-only-and-threadsafe-are-different.aspx – 2013-03-24 05:11:48
@PeterRitchie您能詳細說明需要指定哪些信息這個問題可以回答? – Kyle 2013-03-24 05:23:11