假设我在某个类中有以下属性,其目的是用作锁。
protected object SyncRoot { get; private set; }
无论如何,无论如何设置以及是否设置。如果它实际上是设置的,那么使用它的最佳实践是什么?
由于锁不适用于空对象,我应该这样处理吗?
lock (SyncRoot ?? new object())
SomeMethod();
或者我应该像这样检查 null 吗?
if (SyncRoot != null)
lock (SyncRoot)
SomeMethod();
else
SomeMethod();
如果它实际上是设置的,我想用它来锁定。否则,我不在乎。无论如何,第一个解决方案是否效率低下或多余?
编辑:所有这些答案都很好。但是,我只能选择一个。鉴于我与 Luke 讨论的情况,我的 SyncRoot 没有理由应该为空。在单线程环境中锁的开销并不大,但在多线程环境中是必要的。
(为你们 4 人投票)谢谢大家的快速回复。