为什么使用lock(objLock)比lock(this)更好?

9

可能是重复问题:
为什么lock(this) {...}不好?


在C#中,通常使用lock(objLock)来锁定一个对象,objLock只是为了锁定而创建的对象。

与lock(this)相比,为什么这种方式更可取?除了在类本身上取得锁之外,lock(this)还有哪些负面影响?

2个回答

16

因为其他东西可能锁定该实例,那么你就会发生死锁。

如果你锁定了为此目的创建的对象,你就知道你完全掌控,并且没有其他东西会意外地锁定它。


这是一个特性,而不是一个错误!如果另一个类想要独占访问特定的实例,该怎么办? - Andy

2

如果您将任何公共内容锁定,那么该类和其他一些类都可以尝试获取锁。创建同步对象非常容易,并且始终是首选;

private syncLock = new Object();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接