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 是托管的,并且更轻量级 - 但仅限于您的 AppDomainMutex 可以命名,并且可以跨进程(允许应用程序之间的一些简单 IPC 场景),并且可以在需要等待句柄的代码中使用。

对于大多数简单的场景,Monitor(通过lock)就可以了。

【讨论】:

【参考方案3】:

Mutex 可以跨进程共享,并且比 Monitor 要重得多。

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

【讨论】:

以上是关于c#中的监视器与互斥锁[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用互斥锁和条件变量实现带有信号的监视器

监视器与互斥体

信号量,互斥,监视器之间的区别实现了同步

Synchronized理解及用法

ReentrantLock锁与内置锁synchronized

ReentrantLock锁与内置锁synchronized