在C#中,监视器和互斥锁的区别

71

https://dev59.com/gHVC5IYBdhLWcg3wbQbA - joe
我同意默认情况下使用锁,但如果需要超时或者锁定范围不仅限于单个方法,则需要调用Monitor.Enter / Exit。 - Brian Rasmussen
作为一个额外的注释,监视器提供了通常称为“条件变量”的 Wait/Pulse 方法。它允许一个线程等待直到另一个线程在监视器上调用 Pulse。 - nos
3个回答

52

Monitor(监视器)是被管理的并且更轻量级 - 但仅限于您的AppDomain(应用程序域)Mutex(互斥量)可以命名,并且可以跨进程(允许一些简单的应用程序之间的IPC场景),并且可以在需要等待句柄的代码中使用。

对于大多数简单情况,Monitor(监视器)(通过lock(锁))已足够。


25

一本关于这方面的良好建议来源是Joseph Albahari的"Threading in C#"。所有内容都可以在线获取。在我看来,值得阅读整本书,但您可以查看以下部分:

尽管它没有涵盖.NET 4.0新并行结构,但它是一个非常好的起点。

更新:该书已更新。现在,其第5部分涵盖了.NET 4.0并行编程。


19

互斥锁(Mutex)可以在进程之间共享,而且比监视器(Monitor)更加重量级。

除非需要跨进程同步,否则请使用监视器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接