C# - System.Threading.Monitor控制线程的优点

时间:2009-09-24 09:20:58

标签: c#

由于lock是System.Threading.Monitor的间接表示,如果我希望直接使用Monitor,我可以获得任何额外的好处。(我读过一篇文章,它建议总是使用Monitor来获得额外的好处。但是没有解释这些好处)

3 个答案:

答案 0 :(得分:10)

lock语句是Monitor类的EnterExit方法的语法糖。

您仍然可以使用PulseWait,如下所示:

lock(x) {
    Monitor.Pulse(x);
    Monitor.Wait(x);
}

如果您想使用非阻塞TryEnter方法,您必须(至少据我所知)直接使用Monitor。

我不同意你总是使用Monitor的断言;当您只需要提供它所提供的功能时,lock关键字很方便。

答案 1 :(得分:5)

好吧,lock只调用Monitor.EnterMonitor.Exit,所以如果你限制自己lock,你将无法使用其他有用的功能,例如Monitor.WaitMonitor.Pulse等。否则使用lock而不是手动使用Monitor.EnterMonitor.Exit并没有任何不利之处, lock的优势在于它会自动将相应的代码放入try-finally块中。

答案 2 :(得分:3)

Monitor类实现了监视器同步原语:http://en.wikipedia.org/wiki/Monitor_%28synchronization%29。正如你所看到的那样,它不是真正的.Net / C#理念,它广为人知的概念 - 作为任何计算机学位的一部分而被教授。它不仅为您提供了锁定关键部分的能力,还为给定实例提供了内部队列的实现 - 这使得线程之间的交互更加复杂。

关于你应该使用什么,答案通常是完成工作的最简单方法 - 在> 90%的情况下,只使用lock(sth){...}语法。