为什么我们应该避免使用lock(this)?

24 浏览
0 Comments

为什么我们应该避免使用lock(this)?

这个问题已经在其他地方有答案了:

可能是重复问题:

在C#中,为了使关键区域线程安全,我们可以使用 lock()语句。锁定语句需要一个对象。如果我们将 this 传递给锁定语句,那么问题出在哪里?

admin 更改状态以发布 2023年5月21日
0
0 Comments

来自http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx

一般来说,避免在公共类型或超出代码控制范围的实例上加锁。常见的结构lock (this)lock (typeof (MyType))lock ("myLock")违反了这个指南:

  • 如果实例可以公开访问,那么lock (this)会有问题。
  • 如果MyType可以公开访问,那么lock (typeof (MyType))会有问题。
  • lock(“myLock”)会有问题,因为使用同一字符串的进程中的任何其他代码都将共享相同的锁。

最佳实践是定义一个私有对象来锁定,或定义一个私有静态对象变量,以保护对所有实例都共享的数据。

0
0 Comments

由于this没有封装在类中,因此很难理解谁对其进行了锁定。即,为了确定哪部分代码在this上进行了锁定,您需要经过很多步骤。另一方面,如果您将锁定限制在私有成员上,则很容易理解锁定发生的位置。

0