2
我开发在一个旧的代码库已经在几个地方下面的代码:为什么我收到“互斥体不属于”异常
Mutex mutex = new Mutex(false, "<some mutex name>");
mutex.WaitOne();
try {
// do something
} finally {
mutex.ReleaseMutex();
}
这些互斥锁用于进程内同步,所以我重写了他们用locks代替,问题似乎消失了。
我知道代码不是那里最好的代码(与What is a good pattern for using a Global Mutex in C#?相比),但是这并不能解释为什么mutex.ReleaseEmutex()偶尔会抛出“互斥量未被拥有”。
所以我问上面的代码中有什么缺失(或错误),产生异常?
什么是“//做一些事情”,实际上在做什么?难道它会释放互斥锁(在某些情况下)。 –
在某些情况下,在处理列表(搜索,添加和删除元素)时使用/在其他情况下通过TCP发送/接收消息。它也被用于锁定log4net调用,如logger.Debug(“message”)(不太确定为什么log4net应该关注锁定)。 –
如果这确实是代码,那么'ReleaseMutex'调用不应该抛出该异常。你确定“做某事”代码中没有任何内容释放互斥吗?代码是否总是调用'WaitOne'而不是'WaitOne(timeout)'? –