C#Mutex和Monitor之间的区别



Mutex看起来与锁没有太大区别:

using System.Threading;
class WithMonitor {
  object baton = new object();
  void Method() {
    Monitor.Enter(baton);
    // Work...
    Monitor.Exit(baton);
  }
}
class WithMutex {
  Mutex mutex = new Mutex();
  void Method() {
    mutex.WaitOne();
    // Work...
    mutex.ReleaseMutex();
  }
}

有什么区别?

Monitor确保一次只有一个线程可以访问对象接力棒,而互斥对象保护部分代码。

互斥、监视器和信号量都是同步机制,即它们用于在多个进程或线程(以下称为进程)之间调解对共享资源的访问。然而,它们的使用方式不同:

Mutex:

用于提供互斥,即确保一次最多有一个进程可以执行某些操作(如执行代码段或访问变量)。一个著名的比喻是星巴克的浴室钥匙;只有一个人可以获得它,因此只有一个人才能进入并使用浴室。其他想上厕所的人都得等到钥匙又来了。

显示器:

为对象提供互斥,即在任何时间点,最多一个进程可以访问对象的任何成员/执行其任何方法。这在思想上类似于整个OOP实例的互斥锁*;实例的任何部分一次都不能被多个进程访问。

最新更新