Роббинс Арнольд
Шрифт:
Типичная высокоуровневая структура основанного на сигналах приложения выглядит таким образом:
Оригинальным интерфейсом V7 для ожидания сигнала является
Проблема в только что описанной высокоуровневой структуре приложения кроется в части «Обработка сигнала». Когда этот код запускается, вы не захотите обрабатывать другой сигнал; вы хотите завершить обработку текущего сигнала до перехода к следующему. Одним из возможных решений является структурирование обработчика сигнала таким образом, что он устанавливает флаг и проверяет его в главном цикле:
В основном коде флаг проверяется:
К сожалению, этот код изобилует условиями гонки:
Решением является блокирование интересующего сигнала в любое время, кроме ожидания его появления. Например, предположим, что интересующим нас сигналом является
Ключом к использованию этого является то, что