ConcurrentDictionary中的枚举

时间:2012-06-25 07:48:06

标签: .net multithreading concurrent-programming

如果我在多线程访问方法中使用ConcurentDictionary,我可以确定在这样的构造中:

foreach (Subscription sub in subscriptions[ex].Values)
                    {
                      ....
                    }

subscriptions ConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>>在通过多种方法运行时不会改变,因此它将是线程保存?或者我应该使用锁定:

lock(padLock)
{   
foreach (Subscription sub in subscriptions[ex].Values)
                        {
                          ....
                        }
}

让它正常工作?

1 个答案:

答案 0 :(得分:1)

  

ConcurrentDictionary的所有公共成员和受保护成员   是线程安全的,可以从多个线程同时使用。

所以是的,即使其他线程在迭代它时修改了Values集合,你也会安全无需额外锁定。

通过修改我的意思是它会在字典中添加新对或更改现有值。