为什么我得到“互斥对象不属于自己”?例外

本文关键字:自己 不属于 例外 对象 为什么 | 更新日期: 2023-09-27 18:15:50

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

Mutex mutex = new Mutex(false, "<some mutex name>");
mutex.WaitOne();
try {
    // do something
} finally {
    mutex.ReleaseMutex();
}

这些互斥锁用于进程内同步,所以我用锁来重写它们,问题似乎消失了。

我知道代码不是最好的(与c#中使用全局互斥锁的好模式相比?),但这并不能解释为什么Mutex . releasemutex()偶尔会抛出"互斥锁不属于自己"。

所以我想问的是,上面的代码中缺少了什么(或有什么错误),导致了异常?

为什么我得到“互斥对象不属于自己”?例外

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

这里有一个很好的问题分析: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