0
A
回答
3
你的意思是你要確保沒有其他人使用字典,或沒有其他人使用這字典是價值?
您可以使用鎖定來解決第一個問題,但您無法真正完成第二個。有人可以從字典中獲取對象的引用,並只要他們喜歡就存儲該引用。有可能是一個解決方案,如果該值是一個接口類型 - 您可以通過一個額外的「包裝」類委託所有調用,並使該包裝類失效。我可以進入更多的細節,如果你想要的,但我希望你真的只是在第一種類型的安全:)
這可以這樣實現的興趣:
private static readonly object mutex = new object();
// Or whatever
private static readonly Dictionary<string, string> map =
new Dictionary<string, string>();
public static void AddEntry(string key, string value)
{
lock (mutex)
{
map[key] = value;
}
}
public static string GetValue(string key, string value)
{
lock (mutex)
{
return map[key];
}
}
顯然你會想調整你使用字典的方式。
如果您使用的是.NET 4,另一種方法是使用已經線程安全的ConcurrentDictionary
。
1
相關問題
- 1. 靜態類的線程安全
- 2. 線程安全和靜態子類
- 3. SqlServer類靜態方法 - 線程安全
- 4. 是靜態類線程安全
- 5. 這些私有靜態成員是否線程安全?
- 6. 靜態方法和靜態塊之間的線程安全
- 7. 這個靜態字典字段線程安全嗎?
- 8. 私有靜態字段的設置值
- 9. 靜態方法的線程安全
- 10. 是靜態方法線程安全的
- 11. Java - 靜態方法的線程安全
- 12. C#ASP.NET線程安全的靜態只讀字段
- 13. 如何使類的靜態變量線程安全
- 14. 修改私有靜態只讀字段
- 15. 鎖私有靜態字段是使用
- 16. 靜態類的靜態方法,這種方法線程安全嗎?
- 17. 從不同線程的靜態類訪問靜態方法。它安全嗎?
- 18. 公共靜態類中的非靜態成員是否線程安全?
- 19. 靜態方法和線程安全
- 20. Java靜態和線程安全
- 21. Java靜態方法和線程安全
- 22. 是靜態方法線程安全
- 23. 線程安全和靜態函數
- 24. 靜態方法和線程安全
- 25. 靜態實例線程安全
- 26. 線程安全對象 - 是否靜態?
- 27. C#線程安全靜態成員
- 28. 靜態委託是否線程安全?
- 29. 線程安全訪問靜態集合
- 30. 靜態對象線程安全
@Jon:有問題。我通常使用字典本身作爲同步根(當它是一個私人領域),而不是創建一個單獨的對象。在這種情況下使用單獨對象的優點是什麼? – jgauffin 2010-12-21 07:32:03
@Jon:謝謝你的回覆。我想實現你提到的第二件事。即當我試圖從字典中刪除它時,確保沒有人正在使用值。我的應用程序沒有使用.NET 4.0。它在.NET 3.5上。但是,您能否提供更多細節來實現它? (你已經提到包裝類)。 – Learner 2010-12-21 07:57:23
@jgauffin:我不知道'Dictionary'中的代碼是否自動同步。作爲一個原則問題,我幾乎總是鎖定一個僅用於鎖定課程內容的對象。這意味着我永遠不用擔心其他代碼將會使用該對象進行鎖定。 – 2010-12-21 08:10:07