События позволяют потокам блокироваться, пока не будет передано какое-либо событие (отсюда и название). Блокировка события означает «Разбуди меня, когда что-то случится»; Вы ожидаете, чтобы быть усыпленным. События являются сигнальным механизмом и обеспечивают поддержку этого, которого нет в мьютексах, например, автоматическую возможность сбрасывать сигнал, как только кто-то, кто его ожидал, проснулся. Кроме того, API позволяет блокировать до одного из или всех нескольких сигналов.
Мьютекс (взаимное исключение), с другой стороны, является механизмом координации для общих ресурсов. Думаю сделка. Вы не ожидаете ожидания, но хотите получить доступ к какому-либо общему ресурсу, и только в том случае, если другие уже получают к нему доступ, вы блокируете.
Если вы попытаетесь смоделировать событие, используя мьютекс, вы столкнетесь с проблемой, заключающейся в том, что как только вы получите блокировку (когда должно означать «событие сигнализируется»), вы не пускаете всех остальных, пока не снимите эту блокировку. , Это не семантика сигнализации о событии; оно может остаться в сети, и «ворота» будут открыты для каждого потока, тестирующего событие, без получения каких-либо блокировок.