Создание мьютекса — это то же самое, что его ожидание?C#

Место общения программистов C#
Ответить
Anonymous
 Создание мьютекса — это то же самое, что его ожидание?

Сообщение Anonymous »

Мне нужен глобальный мьютекс, чтобы гарантировать одновременное выполнение только одного экземпляра моего приложения.
Я нашел следующий код в SO:

Код: Выделить всё

using var mutex = MutexAcl.Create(true, mutexId, out bool mutexCreated, securitySettings);
var hasHandle = false;

try
{
try
{
hasHandle = mutex.WaitOne(1000, false);

if (hasHandle == false)
LogError("Timeout waiting for exclusive access.");
}
catch (AbandonedMutexException)
{
hasHandle = true;
}

// do work
}
finally
{
if (hasHandle)
mutex.ReleaseMutex();
}
но меня что-то раздражает:
Зачем ждать мьютекс, если можно использовать переменную mutexCreated?
Если я правильно понимаю, mutexCreated имеет значение true, если глобальный мьютекс не существует, он был создан с помощью этого вызова метода и принадлежит потоку, и если он имеет значение false значит он уже существовал и текущий поток им не владеет, поэтому можно с уверенностью предположить, что другой экземпляр уже запущен.
Я что-то упустил? Почему нам нужно ждать мьютекса, для которого у нас уже есть вызов Create?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ting-on-it
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»