我有一个静态类,它有一个私有字典。我已经编写了公共方法来添加和删除对象。现在我想确保当我从字典中删除其中一个项目时,没有其他人在使用它。
我怎样才能做到这一点?
答案 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)