Использование bInitialOwner объединяет два этапа в один: создание мьютекса и получение мьютекса. Если несколько людей могут создавать мьютекс одновременно, первый шаг может закончиться неудачей, а второй может быть успешным.
Как упоминали другие авторы, это не строго проблема, так как вы получите ERROR_ALREADY_EXISTS
, если кто-то другой создаст его первым. Но затем вы должны различать случаи «не удалось создать или найти мьютекс» и «не удалось получить мьютекс; повторите попытку позже», просто используя код ошибки. Это сделает ваш код трудным для чтения и станет проще.
Напротив, когда bInitialOwner имеет значение FALSE, процесс намного проще:
result = create mutex()
if result == error:
// die
result = try to acquire mutex()
if result == error:
// try again later
else:
// it worked!