簡體   English   中英

如何使靜態類線程的私有靜態字段安全?

[英]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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM