小编Bel*_*oda的帖子

使用锁的最佳实践

假设我在某个类中有以下属性,其目的是用作锁.

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个人)感谢大家的快速回复.

c# locking

9
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

locking ×1