2

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

4

2 回答 2

4

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

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

这是一篇关于锁定的内容丰富的文章,解释了其中一些背后的原因。

于 2010-02-02T18:45:21.353 回答
2

锁定字符串对象也不好,因为它们有时会在应用程序域之间共享,例如Type objects。如果您有多个应用程序域,这样做可能会导致不必要的争用。

于 2010-02-02T19:05:05.163 回答