Почему я получаю исключение "Mutex не принадлежит" - PullRequest
2 голосов
/ 28 ноября 2011

Я работаю над старой кодовой базой, в которой в нескольких местах содержится следующий код:

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

Эти мьютексы используются для внутрипроцессной синхронизации, поэтому я переписал их, используя вместо этого блокировки и проблемы вроде бы исчезли.

Мне известно, что код не самый лучший (по сравнению с Каков хороший пример использования Global Mutex в C #? ), но это не объясняетмне почему mutex.ReleaseMutex () иногда выдает "Mutex не принадлежит".

Итак, я спрашиваю, чего не хватает (или не так) в приведенном выше коде, который создает исключение?

1 Ответ

2 голосов
/ 22 декабря 2011

Обычно это означает, что поток, пытающийся освободить мьютекс, не тот, который его создал.

Здесь есть хороший анализ проблемы: 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

...