锁定单个字典条目而不是整个字典?
假设我有一个 static Dictionary
并且想要执行类似以下操作,但我只想锁定我所在的特定字典条目目前正在处理而不是整个字典:
lock(myDictionary)
{
if(myDictionary["myKey"] == null)
{
myDictionary["myKey"] = new MyClass();
}
}
如果不编写我自己的字典实现,这可能吗?
谢谢,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用新的
ConcurrentDictionary
类。它通过比锁定整个字典更细粒度的方式锁定,有效地提供了线程安全性。You can use the new
ConcurrentDictionary<TKey,TValue>
class. It effectively provides thread safety by locking in a much finer grained manner than locking on the entire dictionary.尝试 ConcurrentDictionary
Try ConcurrentDictionary
在您的情况下,仅“锁定特定字典条目”是没有意义的;即使您编写自己的实现。如果您不知道该条目是否存在,并且在这种情况下想要将其添加到字典中,则始终必须同步对字典控制结构的访问。换句话说,即使您自己实现它,也需要同步对其内部结构的至少某一部分的访问。
In your case it makes no sense to “lock the specific dictionary entry” only; even if you write your own implementation. If you don't know if the entry exists and you want to add it into the dictionary in such a case, you will always have to synchronize access to the dictionary's control structures. In other words, even if you implement it yourself, there will be a need to synchronize access to at least a certain portion of its internal structures.