Spec-Zone.ru › Ada 95
Справочник Ada 95

9.3 Зависимость задач — завершение задач

Динамическая семантика

Каждая задача (кроме задачи окружения — см. 10.2) зависит от одной или нескольких задач-мастеров (см. 7.6.1), следующим образом:
  • Если задача создаётся при вычислении аллокатора для заданного типа доступа, она зависит от каждой задачи-мастера, включающей в себя разработку объявления конечного предка заданного типа доступа.
  • Если задача создаётся при разработке объявления_объекта, она зависит от каждой задачи-мастера, включающей в себя эту разработку.
Кроме того, если задача зависит от заданной задачи-мастера, она определяется как зависящая от задачи, выполняющей задачу-мастера, и (рекурсивно) от любой задачи-мастера этой задачи.
Задача считается завершенной, когда выполнение соответствующего тела_задачи завершено. Задача считается законченной, когда выполнена любая финализация тела_задачи (см. 7.6.1). Первый шаг финализации задачи-мастера (включая тело_задачи) заключается в ожидании завершения всех задач, зависящих от этой задачи-мастера. Задача, выполняющая задачу-мастера, блокируется до завершения всех зависимых задач. Затем выполняется любая оставшаяся финализация, и задача-мастер завершается.
Завершение задачи (и соответствующего тела_задачи) может произойти, когда задача заблокирована в выражении_выбора с открытой альтернативой_прерывания (см. 9.7.1); открытая альтернатива_прерывания выбирается только в том случае, если выполнены следующие условия:
  • Задача зависит от завершённой задачи-мастера;
  • Каждая задача, зависящая от рассматриваемой задачи-мастера, либо уже завершена, либо аналогично заблокирована в выражении_выбора с открытой альтернативой_прерывания.
Когда оба условия выполнены, рассматриваемая задача завершается вместе со всеми задачами, зависящими от рассматриваемой задачи-мастера, которые ещё не завершены.
ПРИМЕЧАНИЯ
8 Полный вид ограниченного частного типа может быть типом задачи или может иметь подкомпоненты типа задачи. Создание объекта такого типа создаёт зависимости в соответствии с полным типом.
9 объявление_переименования_объекта определяет новый вид существующего сущности и, следовательно, не создаёт дополнительных зависимостей.
10 Правила, заданные для коллективного завершения группы задач, все заблокированные в выражениях_выбора с открытыми альтернативами_прерывания, гарантируют, что коллективное завершение может произойти только тогда, когда не осталось активных задач, которые могли бы вызвать одну из задач, которые коллективно завершаются.
11 Если две или более задачи заблокированы в выражениях_выбора с открытыми альтернативами_прерывания и коллективно завершаются, их действия финализации выполняются параллельно.
12 Завершение задачи может произойти по следующим причинам:
  • возникновение исключения во время разработки декларативной_части соответствующего тела_задачи;
  • завершение обрабатываемой_последовательности_выражений соответствующего тела_задачи;
  • выбор открытой альтернативы_прерывания выражения_выбора в соответствующем теле_задачи;
  • прерывание задачи.

Примеры

Пример зависимости задач:
declare
type Global is access Server; -- см. 9.1
A, B : Server;
G : Global;
begin
-- активация A и B
declare
type Local is access Server;
X : Global := new Server; -- активация X.all
L : Local := new Server; -- активация L.all
C : Server;
begin
-- активация C
G := X; -- G и X обозначают один и тот же объект задачи
...
end; -- ожидание завершения C и L.all (но не X.all)
...
end; -- ожидание завершения A, B и G.all


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API