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



              

Спецификации задач и тела задач


Задачный модуль состоит из спецификации задачи и тела задачи. Спецификация задачи, которая начинается зарезервированными словами task type, описывает задачный тип. Значение объекта задачного типа указывает задачу. Если задача имеет входы, то они описываются в спецификации задачи; эти входы также называются входами объекта. Выполнение задачи определяется соответствующим телом задачи.

Спецификация задачи без зарезервированного слова type определяет одну задачу. Описание такой задачи эквивалентно описанию анонимного задачного типа одновременно с описанием объекта этого задачного типа, а идентификатор задачного модуля именует объект. В остальной части данной главы пояснения даются в терминах описаний задачного типа; соответствующие пояснения для одной задачи следуют из упомянутого отношения эквивалентности.

описание-задачи ::== спецификация-задачи; спецификация - задачи :: = task [type] идентификатор [is {описание - входа} {спецификатор - представления} end [простое-имя-задачи]] тело-задачи ::= task body простое-имя-задачи is [раздел - описаний] begin последовательность - операторов [exception обработчик - исключения {обработчик-исключения}] end [простое-имя-задачи];

Простое имя в начале тела задачи должно совпадать с идентификатором задачного моду-ля. Аналогично если в конце спецификации или тела задачи появляется простое имя, то оно должно совпадать с идентификатором задачного модуля. Внутри тела задачи имя соответствующего задачного модуля может быть также использовано для ссылки на объект-задачу (указывать на задачу), тело которой выполняется в данный момент; кроме того, не допускается использование этого имени в качестве обозначения типа внутри собственного задачного модуля. [7]

При предвыполнении спецификации задачи описания входов и спецификаторы представления (если они есть) предвыполняются в том порядке, в котором они даны. Спецификаторы представления применяются только к входам, описанным в спецификации задачи (см. 13.5).

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

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

Примеры спецификации задачных типов:

task type RESOURCE is entry SEIZE; entry RELEASE; end RESOURCE;task type KEYBOARD_DRIVER is entry READ (C : out CHARACTER); entry WRITE (C : In CHARACTER); endKEYBOARD_DRIVER;

Примеры спецификации одной задачи:

task PRODUCER_CONSUMER is entry READ (V : out ITEM); entry WRITE (E : in ITEM); end;task CONTROLLER is entry REQUEST(LEVEL)(D : ITEM); -— семейство ВХОДОВ end CONTROLLER;task USER; -— не имеет входов

Пример спецификации задачи и соответствующего тела:

task PROTECTED_ARRAY is -— INDEX and ITEM — это глобальные типы entry READ (N : in INDEX; V : out ITEM); entry WRITE (N : In INDEX; E : in ITEM); end;task body PROTECTED_ARRAY is TABLE : array(INDEX) of ITEM := (INDEX => NULL_ITEM); begin loop select accept READ (N : in INDEX; V : out ITEM) do V := TABLE(N); end READ; or accept WRITE (N : in INDEX; E : in ITEM) do TABLE(N) := E; end WRITE; end select; end loop; end PROTECTED_ARRAY;

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

Ссылки: вход 9.5, главная программа 10.1, зарезервированное слово 2.9, идентификатор 2.3, обработчик исключения 11.2, объект 3.2, описание 3.1, описание входа 9.5, описание объекта 1, описание типа 1, последовательность операторов 5.1, предвыполнение 3.9, простое имя 4.1, раздел описаний 3.9, спецификатор представления 13.1, тип


[7] 1) Кроме того, оно не может быть использовано в качестве производного от него типа или подтипа. - Прим. ред.









Содержание  Назад  Вперед