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