Двойная проверка блокировки словаря «ContainsKey»

Моя команда в настоящее время обсуждает эту проблему.

Рассматриваемый код похож на

if (!myDictionary.ContainsKey(key))
{
    lock (_SyncObject)
    {
        if (!myDictionary.ContainsKey(key))
        {
            myDictionary.Add(key,value);
        }
    }
}

В некоторых сообщениях, которые я видел, говорится что это может быть большой НЕТ НЕТ (при использовании TryGetValue). Тем не менее члены нашей команды говорят, что это нормально, поскольку ContainsKey не выполняет итерацию по сбору ключей, но проверяет, содержится ли ключ с помощью хэш-кода в O (1) . Следовательно, они утверждают, что здесь нет никакой опасности.

Я хотел бы узнать ваше честное мнение по этому поводу.

15
задан annemartijn 21 August 2014 в 09:37
поделиться