监视器应该等待什么对象?

时间:2010-02-02 18:35:09

标签: .net multithreading monitor wait

当使用Monitor.Wait(object obj)时,obj应该使用什么?在这篇article中,我正在阅读.NET中的多线程,作者将实例化一个新的Object(),仅用作监视器锁。这是你在实践中应该做的,或者更典型的是监视两个或多个线程之间共享的实际变量?

2 个答案:

答案 0 :(得分:4)

是的,我通常会锁定专门为此目的创建的新对象。我还确保它是私有的和静态的,并且不是一个Type对象。同样重要的是要意识到你并没有真正“锁定”变量或对象,而是使用锁作为令牌来阻止在多个线程上执行代码块。

锁定this(当前实例,如果您正在使用C#)不太受欢迎,因为任何有权访问该实例的代码都可以锁定它,从而增加了死锁的可能性。通过创建自己的锁定对象,您可以完全控制自己。

关于锁定的

Here's an informative article解释了其中一些原因。

答案 1 :(得分:2)

锁定字符串对象也不好,因为它们有时会在类型对象等应用领域中共享。如果您有多个app-domain,这样做可能会导致不必要的争用。