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 ) - если она закончила свое выполнение и нет зависимых от нее задач. Ш СОВЕТЫ: • Не используйте незавершающиеся задачи. |
| Оглавление| |