Ада-95. Компилятор GNAT


Инструкция перенаправления очереди requeue - часть 3


получит значение True.

Особый интерес представляет вход Signal.

Значение его барьера постоянно и всегда равно True, таким образом, он всегда открыт для обработки.

Если нет задач ожидающих событие (нет задач вызвавших вход Wait), то его вызов просто ничего не делает.

С другой стороны, при наличии задач ожидающих событие, он должен позволить им продолжить выполнение, причем так, чтобы ни одна новая задача не попала в очередь ожидания события, после чего, он должен сбросить флаг, чтобы восстановить управление.

Он выполняет это перенаправляя себя на вход Reset

(с помощью инструкции перенаправления requeue) после установки флага Occurred в значение True, для индикации появления события.

Семантика инструкции перенаправления requeue

подобна тому, что описано при рассмотрении алгоритма работы Signal.

Однако, помните, что в конце обработки тела входа или защищенной процедуры осуществляется повторное вычисление состояний тех барьерных условий в очереди которых находятся задачи, приостановленные в ожидании обслуживания.

В этом случае, действительно существуют задачи находящиеся в очереди входа Wait, и существует задача в очереди входа Reset

(та задача которая перед эти вызвала вход Signal).

Барьер для Wait теперь имеет значение True, а барьер для Reset, естественно, False, поскольку очередь задач на входе Wait не пуста.

Таким образом, ожидающая задача способна выполнить тело входа Wait

(которое фактически ничего не делает), после чего опять осуществляется повторное вычисление значений барьеров.

Этот процесс повторяется до тех пор, пока все приостановленные в ожидании задачи не возобновят свое выполнение и значение барьера для Reset не получит значение True.

Оригинальная задача, которая вызвала сигнал, теперь выполняет тело входа Reset, сбрасывая флаг Occurred в значение False, возвращая всю систему в исходное состояние еще раз.

Теперь, защищенный объект (как единое целое) полностью освобожден, поскольку нет ни одной ожидающей задачи, ни на одном барьере.




- Начало -  - Назад -  - Вперед -



Книжный магазин