Mutex vs Event в Windows

может кто-нибудь объяснить, в чем разница, если я делаю

mutex = createMutex
waitForSingleObject
Release(mutex)

и

event = createEvent
waitForSingleObject
Release(event)

Я так запутался, могу ли я использовать обе версии для синхронизации? заранее спасибо за любую помощь

Ответ 1

Вы используете мьютекс, чтобы обеспечить доступ только к одному потоку выполнения. Например, если вы хотите обновить список, который потенциально может использоваться несколькими потоками, вы должны использовать мьютекс:

acquire mutex
update list
release mutex

При использовании мьютекса только один поток за раз может выполнять "список обновлений".

Вы используете ручное событие reset, если хотите, чтобы несколько потоков ожидали, что что-то произойдет, прежде чем продолжить. Например, вы начали несколько потоков, но все они приостановлены, ожидая какого-то другого события, прежде чем они смогут продолжить. Как только это событие произойдет, все потоки могут начать работать.

Основной поток будет выглядеть следующим образом:

create event, initial value false (not signaled)
start threads
do some other initialization
signal event

Каждый код потока:

do thread initialization
wait for event to be signaled
do thread processing

Ответ 2

Да, оба могут использоваться для синхронизации, но по-разному.

Mutex - объект взаимного исключения и может быть получен только одним экземпляром за раз. Он используется, чтобы избежать одновременного использования общего ресурса, такого как глобальная переменная, фрагментами компьютерного кода

Событие - это объект, который может быть явно установлен в состояние с помощью функции SetEvent.