[英]How can I make private static field of the static class thread safe?
我有一個帶有私有Dictionary的靜態類。 我已經編寫了一些公共方法來添加和刪除對象。 現在,我要確保當我從字典中刪除一項時,沒有其他人正在使用它。
我該如何實現?
你的意思是,你要確保沒有其他人正在使用的字典 ,或者沒有其他人正在使用的是字典中的價值?
您可以使用鎖定來解決第一個問題……但是您實際上無法做到。 有人可以從字典中獲取對該對象的引用,並只要願意就可以存儲該引用。 如果該值是接口類型,則可能有解決方案-您可以通過一個額外的“包裝器”類委派所有調用,並使該包裝器類無效。 如果您願意,我可以提供更多詳細信息,但我希望您真的對第一類安全感興趣:)
可以這樣實現:
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
。
看看使用lock語句(C#參考)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.