c#中的监视器与互斥锁[重复]
Posted
技术标签:
【中文标题】c#中的监视器与互斥锁[重复]【英文标题】:Monitor vs Mutex in c# [duplicate] 【发布时间】:2010-11-12 22:30:02 【问题描述】:可能重复:What are the differences between various threading synchronization options in C#?
C# 中的 Monitor 和 Mutex 有什么区别?
在 C# 中何时使用 Monitor 以及何时使用 Mutex?
【问题讨论】:
***.com/questions/301160/… 我同意默认使用锁定,但如果 1) 需要超时或 2) 如果锁定范围因某种原因不限于单一方法,则需要调用 Monitor.Enter/Exit . 作为补充说明,监视器通过其等待/脉冲方法提供通常称为“条件变量”的内容。它允许一个线程等待某些东西,直到另一个线程在监视器上调用 Pulse。 【参考方案1】:Joseph Albahari 的“C# 中的线程”是关于这些内容的一个很好的建议来源。所有内容均可在线获取。在我看来,the whole book 值得一读,但你可以检查这些部分:
开启Locking (C# Monitor);
开启Mutex。
虽然没有涵盖.NET 4.0 new parallel constructs,但这是一个很好的起点。
更新:该书已更新。现在,它在其part 5 中介绍了 .NET 4.0 并行编程。
【讨论】:
【参考方案2】:Monitor
是托管的,并且更轻量级 - 但仅限于您的 AppDomain
。 Mutex
可以命名,并且可以跨进程(允许应用程序之间的一些简单 IPC 场景),并且可以在需要等待句柄的代码中使用。
对于大多数简单的场景,Monitor
(通过lock
)就可以了。
【讨论】:
【参考方案3】:Mutex 可以跨进程共享,并且比 Monitor 要重得多。
除非您需要跨进程边界进行同步,否则请使用监视器。
【讨论】:
以上是关于c#中的监视器与互斥锁[重复]的主要内容,如果未能解决你的问题,请参考以下文章