2011-11-28 55 views
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()偶尔会抛出“互斥量未被拥有”。

所以我问上面的代码中有什么缺失(或错误),产生异常?

+2

什么是“//做一些事情”,实际上在做什么?难道它会释放互斥锁(在某些情况下)。 –

+0

在某些情况下,在处理列表(搜索,添加和删除元素)时使用/在其他情况下通过TCP发送/接收消息。它也被用于锁定log4net调用,如logger.Debug(“message”)(不太确定为什么log4net应该关注锁定)。 –

+0

如果这确实是代码,那么'ReleaseMutex'调用不应该抛出该异常。你确定“做某事”代码中没有任何内容释放互斥吗?代码是否总是调用'WaitOne'而不是'WaitOne(timeout)'? –

回答

相关问题