2012-06-25 15 views
1

如果我使用ConcurentDictionary DIC在多線程訪問的方法,我可以肯定的是,在這樣的結構:枚舉上ConcurentDictionary

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

subscriptions運行時ConcurrentDictionary<string, ConcurrentDictionary<long, Subscription>>不會改變通過幾種方法,所以,這將是線程救?或者我應該使用如下鎖:

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

使其正常工作?

回答

1

ConcurrentDictionary 的所有公共和受保護成員都是線程安全的,可以從多個線程同時使用。

所以,是的,你會很安全沒有額外的鎖,即使一些其他線程修改Values集合,而你遍歷它。

通過修改我的意思是它添加新的對或更改字典中的現有值。