如何使静态类线程的私有静态字段安全?

时间:2010-12-21 07:14:50

标签: c# static thread-safety

我有一个静态类,它有一个私有字典。我已经编写了公共方法来添加和删除对象。现在我想确保当我从字典中删除其中一个项目时,没有其他人在使用它。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

你的意思是你想确保没有其他人使用字典,或者没有其他人使用 字典中的值?< / p>

你可以解决第一次使用锁定...但你不能真正做第二次。有人可以从字典中获取对象的引用,并根据需要存储该引用。如果值是接口类型,可能是一个解决方案 - 您可以通过额外的“包装器”类委派所有调用,并使该包装类失效。如果你愿意,我可以详细介绍,但是我希望你真的只对第一种安全感兴趣:)

这可以这样实现:

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)