假设我有一个并且想做类似以下的事情,除了我只想锁定我当前正在处理的特定字典条目而不是整个字典:static Dictionary
<string, object
>
lock(myDictionary)
{
if(myDictionary["myKey"] == null)
{
myDictionary["myKey"] = new MyClass();
}
}
如果不编写我自己的 Dictionary 实现,这可能吗?
谢谢,
假设我有一个并且想做类似以下的事情,除了我只想锁定我当前正在处理的特定字典条目而不是整个字典:static Dictionary
<string, object
>
lock(myDictionary)
{
if(myDictionary["myKey"] == null)
{
myDictionary["myKey"] = new MyClass();
}
}
如果不编写我自己的 Dictionary 实现,这可能吗?
谢谢,
您可以使用新ConcurrentDictionary<TKey,TValue>
类。它通过以比锁定整个字典更细粒度的方式锁定来有效地提供线程安全。
尝试并发字典
在您的情况下,仅“锁定特定的字典条目”是没有意义的;即使您编写自己的实现。如果您不知道条目是否存在并且在这种情况下想要将其添加到字典中,您将始终必须同步对字典控制结构的访问。换句话说,即使您自己实现它,也需要同步对其内部结构的至少某个部分的访问。