Рекомендации по использованию блокировки

Предположим, у меня есть следующее свойство в каком-то классе, и его назначение — использовать в качестве блокировки.

protected object SyncRoot { get; private set; }

В любом случае, независимо от того, как и если это было установлено. Как лучше всего использовать его, если он действительно установлен?

Поскольку блокировка не работает с нулевыми объектами, должен ли я обрабатывать это так?

lock (SyncRoot ?? new object())
    SomeMethod();

Или я должен проверить нуль, как это?

if (SyncRoot != null)
    lock (SyncRoot)
        SomeMethod();
else
    SomeMethod();

Если он действительно установлен, я бы хотел использовать его для блокировки. В противном случае мне все равно. Является ли первое решение неэффективным или избыточным в любом случае?

РЕДАКТИРОВАТЬ :Все эти ответы хороши. Однако я могу выбрать только один. Учитывая мою ситуацию, обсуждавшуюся с Люком, нет причин, по которым мой SyncRoot должен быть нулевым. Накладные расходы на блокировку в однопоточной среде невелики, но необходимы в многопоточной -среде.

(Голосуйте за всех 4 из вас )Спасибо всем за ваши быстрые ответы.

9
задан Beljoda 3 August 2012 в 03:22
поделиться