Книга: Системное программирование в среде Windows
Обзор: четыре модели использования событий
Обзор: четыре модели использования событий
Комбинирование автоматически сбрасываемых и сбрасываемых вручную событий с функциями SetEvent и PulseEvent приводит к четырем различным способам использования событий. Каждая из четырех комбинаций уникальна и каждая из них оказывается полезной или даже необходимой в той или иной ситуации, так что все они будет соответствующим образом использованы в примерах и упражнениях, приведенных в этой и следующей главах.
Предостережение
Некорректное использование событий может привести к возникновению условий состязаний, взаимоблокировок и других тонких, трудно обнаруживаемых ошибок. В главе 10 описываются методики, применение которых является обязательным почти во всех случаях использования событий, за исключением самых тривиальных.
В табл. 8.1 описаны четыре возможные ситуации.
Таблица 8.1. Сводная таблица свойств событий
Автоматически сбрасываемые события | Сбрасываемые вручную события | |
---|---|---|
SetEvent | Освобождается строго один поток. Если в этот момент ни один из потоков не ожидает наступления события, то поток, который первым перейдет в состояние ожидания следующих событий, будет сразу же освобожден. После этого событие немедленно автоматически сбрасывается. | Освобождаются все потоки, которые в настоящее время ожидают наступления события. Событие остается в сигнальном состоянии до тех пор, пока не будет сброшено каким-либо потоком. |
PulseEvent | Освобождается строго один поток, но только в том случае, если имеется поток, ожидающий наступления события. | Освобождаются все потоки, которые в этот момент ожидают наступления события, если таковые имеются, после чего событие сбрасывается и переходит в несигнальное состояние. |
Образно говоря, автоматически сбрасываемое событие — это дверь, снабженная пружиной, которая обеспечивает автоматическое закрытие двери, в то время как вручную сбрасываемое событие можно уподобить двери, в которой пружина отсутствует и которая, будучи раз открытой, продолжает оставаться в таком состоянии. Используя эту метафору, можно сказать, что функция PulseEvent открывает дверь и закрывает ее сразу же после того, как через нее проходят одна (автоматически сбрасываемые события) или все (вручную сбрасываемые события) ожидающие потоки. Функция SetEvent открывает дверь и освобождает ее.
- Глава 1. Обзор Ruby
- Обзор основных причин повреждения базы данных
- Глава 7 Чего нужно опасаться при моделировании бизнес-процессов. Проектные риски моделирования бизнеспроцессов
- Раздел VII Левиафан в Сети: защита права на тайну частной жизни после событий 2013 г.
- Первый просмотр: краткий обзор
- Расширение механизма событий
- Rational Rose 2000 и UML Визуальное моделирование
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- Построение модели выходов (результатов)
- 6.2. Модели оценки бизнес-тренинга
- Общие принципы моделирования
- 1.2.1. Принципы построения модели IDEF0