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

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

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

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

Примеры

Пример зависимости задач:
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