Введение в программирование - Учебное пособие (Корочкин А. В.)

9.9 выполнение и   зависимость задач

Выполнение программы на языке Ада - это выполнение одной или нескольких задач. Каждая задача имеет собственную нить управления, выполняется независимо и параллельно, взаимодействуя ( явно или не­явно ) с другими задачами.

Выполнение задачи - это выполнение тела задачи. Инициация этого выполнения называется активизацией задачи и включает предвыпол-нение описания тела.

Задача в Аде - аналог понятия процесса и может находиться в сле­дующих состояниях:

•   гототвности   (  ready)

•   выполнения или активности ( run)

•   блокированиея (blocked)

•   завершения (terminate )

•   пассивном   (inactive).

Создание задачи ( задачного обьекта ) может быть выполнено :

•   как часть предвыполнения  описания обьекта, размещенного непо­средственно внутри некоторой области описания;

•   как часть выполнения генератора для ссылочных типов.

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

99

Глава 9.   Задачи

98

Ада 95. Введение в программирование

 

 

D   Например :

procedure   Control is

task  type    Recources;   - - заданный тип ТА, ТВ : Resources ;         - - создание двух задач ТХ :    array    ( 1'.. 3 )     of     Resources;   - - создание массива

- -  задач

type   Normal    is     access      Resources;  - - ссылочный тип F :     Normal : =   new    Resources ;   - - активизация     F . all begin

- -  в этом месте процедура Control блокируется пока не активизи-

- -  руются (одновременно) все задачи из описания процедуры :

- -  ТА, ТВ , F, ТХ ( 1 ) .. ТХ(3).

- - начало выполнения тела процедуры

end   Control;       - - ожидание завершения всех активизированных - -    задач

Различают нормальное и ненормальное завершение задачи. Нор­мальное завершение - при достижении end или при передаче управ­ления операторами exit, return, goto, requeue или при выборе аль­тернативы завершения. Ненормальное завершение - когда управление передается из конструкции через оператор abort или при возбужде­нии исключения.

Взаимодействие задач включает:

•   активизацию и завершение задач

•   вызов защищенной процедуры из защищенного модуля

•   вызов входа другой задачи.

В языке различают понятия задача заканчивается и задача завершается. Задача закончилась ( completed ) ( закончила свое вы-полнени ) - если выполнено ее тело; в теле возбуждено исключение, но не имеется соответствующий обработчик исключения, а при наличии обработчика - по окончанию его выполнения. Задача завершена ( terminated ) - если она закончила свое выполнение и нет зависимых от нее задач.

Ш СОВЕТЫ:

•   Не используйте незавершающиеся задачи.