Справочное руководство по языку Ада-83


Входы, вызовы входов и операторы принятия - часть 3


Если вход был вызван и соответствующий оператор принятия достигнут, то его последовательность операторов (если она есть) выполняется вызванной задачей (вызывающая задача остается приостановленной). Это взаимодействие задач называется

рандеву.

После рандеву вызывающая задача и задача, содержащая вход, продолжают выполняться параллельно.

Если несколько задач вызывают один и тот же вход до того, как достигнут оператор принятия, то эти вызовы становятся в очередь; с каждым входом связывается одна очередь. Каждое выполнение оператора принятия удаляет из очереди один вызов. Вызовы обрабатываются в порядке поступления.

При попытке вызвать вход задачи, закончившей свое выполнение, в точке вызова вызывающей задачи возбуждается исключение TASKING_ERROR; это же исключение возбуждается в точке вызова, если вызванная задача заканчивает свое выполнение до принятия входа (см. также разд. 9,10 для случая, когда вызванная задача становится аварийной). Исключение CONSTRAINT_ERROR возбуждается, если индекс входа семейства не принадлежит заданному дискретному диапазону.

Примеры описаний входов:

entry

READ(V : out ITEM); entry SEIZE; entry REQUEST(LEVEL)(D : ITEM); -- семейство входов

Примеры вызовов входов:

CONTROL.RELEASE; -— см. 9.2 и 9.1 PRODUCER_CONSUMER.WRITE(E); -— CM. 9.1 POOL(5).READ(NEXT_CHAR); -— CM. 9.1 и 9.2 CONTROLLER.REQUEST(LOW)(SOME_ITEM); —- см. 9.1

Примеры операторов принятия:

accept SEIZE;

accept READ(V : out ITEM) do

V := i.OCAUTEM; end READ;

accept REQUEST(LOW)(D : ITEM) do

... end REQUEST;

Примечание.

Заданный в операторе принятия раздел формальных параметров не предвыполняется; он используется только для идентификации соответствующего входа.

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




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



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