Исключение при попытке приобрести ранее приобретенный мьютекс - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть следующие строки кода:

// index is an integer
Mutex mutex = new Mutex(false, "MUTEX_PREFIX" + index.ToString());
mutex.WaitOne();
// Access to the shared object which should not be accessed by multiple threads.
mutex.ReleaseMutex();

Та же самая логика (названная mutex) используется другими потоками, поэтому я удостоверяюсь, что для правильного ресурса используется правильная блокировка.

Проблема в том, что если именованный mutex получен другим потоком (или процессом), текущий поток получает исключение вместо блокировки во второй строке.

Что мне нужно - это ожидание именованного mutex, а затем продолжить с моим кодом.

Где я ошибаюсь?

1 Ответ

0 голосов
/ 11 апреля 2011

Вы должны вызвать mutex.ReleaseMutex (), когда закончите. Также вы ловите все исключения и отпускаете и перебрасываете;

Типичным шаблоном является использование блокировки, которая справляется с исключениями:

 lock (typeof(MyClass))
 {
     .. access to the share object
 }
...