当使用Monitor.Wait(object obj)时,obj应该使用什么?在这篇article中,我正在阅读.NET中的多线程,作者将实例化一个新的Object(),仅用作监视器锁。这是你在实践中应该做的,或者更典型的是监视两个或多个线程之间共享的实际变量?
答案 0 :(得分:4)
是的,我通常会锁定专门为此目的创建的新对象。我还确保它是私有的和静态的,并且不是一个Type对象。同样重要的是要意识到你并没有真正“锁定”变量或对象,而是使用锁作为令牌来阻止在多个线程上执行代码块。
锁定this
(当前实例,如果您正在使用C#)不太受欢迎,因为任何有权访问该实例的代码都可以锁定它,从而增加了死锁的可能性。通过创建自己的锁定对象,您可以完全控制自己。
Here's an informative article解释了其中一些原因。
答案 1 :(得分:2)
锁定字符串对象也不好,因为它们有时会在类型对象等应用领域中共享。如果您有多个app-domain,这样做可能会导致不必要的争用。