为什么我得到“Mutex不归属”的例外

时间:2011-11-28 09:25:11

标签: c# mono mutex

我正在开发一个旧代码库,它在以下几个地方都有以下代码:

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.ReleaseMutex()偶尔抛出“Mutex不归属”。

所以我问上面代码中缺少什么(或者错误)会产生异常?

1 个答案:

答案 0 :(得分:2)

这通常意味着尝试释放互斥锁的线程不是创建互斥锁的线程。

这里有一个很好的问题分析:http://blogs.msdn.com/b/willstan/archive/2009/03/03/the-attempt-to-release-mutex-not-owned-by-caller-exception-what-is-it-and-how-to-avoid-it.aspx