Чтобы понять, что происходит в этих утверждениях, нужно понять, что такое мьютекс и как они работают. Я не буду вдаваться в подробности, но укажу на этот справочник . Прочтите первые несколько глав, пока не дойдете до раздела о мьютексах.
Объявление Mutex в вашем первом фрагменте кода использует isNew
bool, чтобы указать, что текущий экземпляр приложения был запущен первым, а также первый экземпляр, создавший Mutex. Это означает, что каждое вторичное выполнение вашего приложения может быть проинформировано о том, что его дескриптор общесистемного Mutex не был первым, кто создал и получил доступ к Mutex.
Следующий блок if
затем проверяет, было ли ассоциированное задание первым подать сигнал Mutex, а затем соответствующим образом обрабатывает состояние.
Второй фрагмент кода совершенно другой. Mutex может использоваться в задаче (задача B) для ожидания другой задачи (задача A), чтобы подать сигнал Mutex о том, что любая другая задача (задача B) может быть продолжена.
Метод WaitOne(secs, releaseConext)
говорит: подождите, пока Mutex отправит ответный сигнал в течение X
секунд , если он заблокирован другим потоком . Если метод не получает ответный сигнал через X
секунд, он возвращает false
и, в случае вашего примера кода, входит в блок if
, который используется для закрытия приложения.
Лично я бы использовал первый фрагмент кода. Я полагаю, что они оба работают с одинаковым количеством накладных расходов. Тем не менее, при выборе какой версии использовать, я бы посчитал, что первый метод является наилучшим для использования на практике.