Mutex и Event на Windows - PullRequest
       3

Mutex и Event на Windows

7 голосов
/ 16 сентября 2010

Зачем нам нужен Mutex и события в Windows?В том смысле, что окна не могут иметь только Mutex?Что это можно сделать с событиями, которые нельзя сделать с Mutex?

Ответы [ 2 ]

9 голосов
/ 16 сентября 2010

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

Мьютекс (взаимное исключение), с другой стороны, является механизмом координации для общих ресурсов. Думаю сделка. Вы не ожидаете ожидания, но хотите получить доступ к какому-либо общему ресурсу, и только в том случае, если другие уже получают к нему доступ, вы блокируете.

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

1 голос
/ 16 сентября 2010

Mutex, предназначенный для межпроцессной синхронизации.Это объект режима ядра.События для многопоточной синхронизации в рамках одного процесса.Это объект пользовательского режима.

Объект Mutex очень общий и тяжелый, с другой стороны, объект Event гораздо более легкий.В большинстве случаев необходимо использовать синхронизацию в пользовательском режиме, поскольку она обеспечивает меньше циклов ЦП.

...