为什么我们应该避免使用lock(this)?
为什么我们应该避免使用lock(this)?
这个问题已经在其他地方有答案了:
可能是重复问题:
在C#中,为了使关键区域线程安全,我们可以使用 lock()
语句。锁定语句需要一个对象。如果我们将 this
传递给锁定语句,那么问题出在哪里?
admin 更改状态以发布 2023年5月21日
来自http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx:
一般来说,避免在公共类型或超出代码控制范围的实例上加锁。常见的结构
lock (this)
、lock (typeof (MyType))
和lock ("myLock")
违反了这个指南:
- 如果实例可以公开访问,那么
lock (this)
会有问题。- 如果
MyType
可以公开访问,那么lock (typeof (MyType))
会有问题。lock(“myLock”)
会有问题,因为使用同一字符串的进程中的任何其他代码都将共享相同的锁。最佳实践是定义一个私有对象来锁定,或定义一个私有静态对象变量,以保护对所有实例都共享的数据。