Предположим, у меня есть следующее свойство в каком-то классе, и его назначение — использовать в качестве блокировки.
protected object SyncRoot { get; private set; }
В любом случае, независимо от того, как и если это было установлено. Как лучше всего использовать его, если он действительно установлен?
Поскольку блокировка не работает с нулевыми объектами, должен ли я обрабатывать это так?
lock (SyncRoot ?? new object())
SomeMethod();
Или я должен проверить нуль, как это?
if (SyncRoot != null)
lock (SyncRoot)
SomeMethod();
else
SomeMethod();
Если он действительно установлен, я бы хотел использовать его для блокировки. В противном случае мне все равно. Является ли первое решение неэффективным или избыточным в любом случае?
РЕДАКТИРОВАТЬ :Все эти ответы хороши. Однако я могу выбрать только один. Учитывая мою ситуацию, обсуждавшуюся с Люком, нет причин, по которым мой SyncRoot должен быть нулевым. Накладные расходы на блокировку в однопоточной среде невелики, но необходимы в многопоточной -среде.
(Голосуйте за всех 4 из вас )Спасибо всем за ваши быстрые ответы.