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


Спецификации задач и тела задач - часть 2


Выполнение тела задачи вызывается активизацией задачного объекта соответствующего типа (см. 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, описание объекта 3.2.1, описание типа 3.3.1, последовательность операторов 5.1, предвыполнение 3.9, простое имя 4.1, раздел описаний 3.9, спецификатор представления 13.1, тип 3.3.


[7]

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

Прим. ред.

Пред. 

Уровень выше  След.

8.7. КОНТЕКСТ РАЗРЕШЕНИЯ СОВМЕЩЕНИЯ

 

Начало  

9.2. ЗАДАННЫЕ ТИПЫ И ЗАДАЧНЫЕ ОБЪЕКТЫ




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