我的團隊目前正在討論這個問題。字典上的雙重鎖定鎖「ContainsKey」
有問題的代碼是沿
if (!myDictionary.ContainsKey(key))
{
lock (_SyncObject)
{
if (!myDictionary.ContainsKey(key))
{
myDictionary.Add(key,value);
}
}
}
線的東西有些是我見過的帖子說,這可能是一個很大的NO NO(使用TryGetValue時)。然而我們團隊的成員說可以,因爲「ContainsKey」不會對密鑰集合進行迭代,而是通過O(1)中的哈希代碼檢查密鑰是否被包含。因此他們聲稱這裏沒有危險。
我希望得到你對這個問題的誠實意見。
你可能想看看ConcurrentDictionary。 – chillitom 2011-05-16 14:22:56
只是一個細節,但你可能意味着'!ContainsKey()' – 2011-05-16 14:25:13
你是否發現鎖定整個字典的效率問題? – Nick 2011-05-16 14:29:33