lock (someObject) {
// ... some code
}
但是如何在不同的进程之间做相同的事情呢?我认为这就是使用“全局互斥锁”的地方,所以我尝试了各种方式来使用
Mutex
类,但它似乎不能满足我的要求,这些要求是:
- 如果你是唯一的实例,请继续运行代码。
- 如果你是第二个实例,请等待第一个实例完成,然后运行代码。
- 不要抛出异常。
- 只需在
using(){...}
子句中实例化Mutex
对象似乎什么也没发生;两个实例仍然可以同时运行。 - 对Mutex调用
.WaitOne()
会导致第一个实例运行,第二个实例等待,但第二个实例会无限期地等待,即使第一个实例调用了.ReleaseMutex()
并离开了using(){}
范围。 .WaitOne()
在第一个进程退出时抛出异常(System.Threading.AbandonedMutexException
)。
Mutex
的解决方案非常受欢迎,特别是因为Mutex
似乎是Windows特定的。
Mutex
是仅适用于Windows的吗? - Anon.System.Threading.Mutex
。如果它是 .NET 库的一部分,你可以期望它在任何 .NET 平台上运行(包括 mono,一旦它完成了该部分的实现)。 - Anon.