Мьютексы - дескрипторы уровня ОС.Они закроются, когда ваш процесс закроется (если вы не закроете их раньше, то есть.)
edit
Хорошо, я явно неправильно понял пример и вопрос.Если вы просто пытаетесь определить, существует ли другой экземпляр, вы создадите именованный мьютекс (или подобный объект) и просто проверите его существование, не блокируя его.
Вызов WaitOne
блокируетна него вступает во владение, а ReleaseMutex
избавляется от него (до тех пор, пока нет дополнительных вызовов на WaitOne
).Если вы завершаете поток, не освобождая мьютекс полностью, он оставляет объект в плохом состоянии, как объясняется в тексте, который цитирует Мика.
Я принял ваш вопрос о том, закрываете ли вы дескриптор до завершения процесса, что совсем другое.
дополнительная
На уровне SDK [API] [1] вы можете вызвать CreateMutex
с ожиданием сбоя, когда мьютекс с тем же именем уже был создан.В .NET (ну, по крайней мере, в 4.0) есть [конструктор] [2], который заполняет createdNew
bool.
[1]: http://msdn.microsoft.com/en-us/library/ms682411(VS.85).aspx CreateMutex
[2]: http://msdn.microsoft.com/en-us/library/bwe34f1k(v=VS.90).aspx Мьютекс