Ядро NT использует объекты событий, чтобы разрешить передачу сигналов объектам, ожидающим сигнала. Мьютекс и семафор также являются ожидаемыми объектами ядра (Kernel Dispatcher Objects), но с другой семантикой. Единственный раз, когда я сталкивался с ними, это ожидание завершения ввода-вывода в драйверах.
Итак, моя теория по вашей проблеме - возможно, неисправный драйвер, или вы полагаетесь на специализированное оборудование?
Редактировать: Подробнее (из Windows Internals, 5-е издание - Глава 3 Механика системы)
Некоторые объекты диспетчера ядра (например, мьютекс, семафор) имеют концептуальную собственность. Таким образом, при получении сигнала об освобождении один ожидающий поток освободит эти ресурсы. А другим придется ждать дальше. События не принадлежат, поэтому доступны для сброса любым потоком.
Также есть три типа событий:
- Уведомление: при наличии сигнала все ожидающие потоки освобождаются
- Синхронизация: при сигнале освобождается один ожидающий поток, но событие сбрасывается
- Keyed: On сигнализирует об одном ожидающем потоке в том же процессе , в котором освобождается сигнализатор.
Еще одна интересная вещь, которую я узнал, состоит в том, что критические секции ( примитив блокировки в c # ) на самом деле не являются объектами ядра, скорее они реализованы из события с ключом, или мьютекс или семафор, как требуется.