1

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

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

subscriptions是不是ConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>>通过几种方法运行时都不会改变,所以它会被线程保存?或者我应该像这样使用锁:

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

让它正常工作?

4

1 回答 1

1

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

Values因此,是的,即使在您迭代集合时其他线程修改了集合,您也无需额外的锁就可以安全。

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

于 2012-06-25T07:55:56.873 回答