.NET Mutext.ReleaseMutex и Mutex.Закрыть - PullRequest
       6

.NET Mutext.ReleaseMutex и Mutex.Закрыть

4 голосов
/ 22 сентября 2011

Какая разница между этими двумя? Если при закрытии приложения я сделаю Mutex.Close() вместо Mutex.Release(), какой будет побочный эффект?

1 Ответ

9 голосов
/ 22 сентября 2011

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

Закрыть используется для очистки ресурсов, выделенных путем объявления объекта мьютекса, независимо от того, заблокирован ли он на нем или нет, если вы приобрели мьютекс, он его освободит (эквивалентно вызову ReleaseMutex. Если вы планируете заблокировать мьютекс для всего приложения (т. Е. Использовать его для обеспечения единственного экземпляра вашего приложения), то я бы обернул его в оператор использования, подобный примеру Джозефа Албахари руководство по потокам (необходимо прочитать). Ссылка на второй раздел, прокрутите вниз до части Mutex, чтобы увидеть пример.

...