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实例的互斥锁*;实例的任何部分一次都不能被多个进程访问。