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

9.2 Выполнение задач — Активация задач

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

Выполнение задачи заданного типа задач состоит из выполнения соответствующего task_body. Начальная часть этого выполнения называется активацией задачи; она состоит из разработки declarative_part task_body. Если исключение будет распространено при разработке declarative_part, активация задачи определяется как неудачная, и она становится завершенной задачей.
Объект задачи (который представляет одну задачу) может быть создан либо как часть разработки object_declaration, которая происходит непосредственно внутри некоторой области объявления, либо как часть вычисления allocator. Все задачи, созданные при разработке object_declaration одной области объявления (включая подкомпоненты объявленных объектов), активируются вместе. Аналогично, все задачи, созданные при вычислении одного allocator, активируются вместе. Активация задачи связана с самым внутренним allocator или object_declaration, которые отвечают за ее создание.
Для задач, созданных при разработке object_declaration данной области объявления, активации инициируются в контексте handled_sequence_of_statements (и связанных с ним exception_handlers, если таковые имеются — см. 11.2), непосредственно перед выполнением операторов _sequence. Для пакета без явного тела или явного handled_sequence_of_statements предполагается неявное тело или неявный null_statement, как определено в 7.2.
Для задач, созданных при вычислении allocator, активации инициируются как последний шаг вычисления allocator после завершения любой инициализации для объекта, созданного allocator, и перед возвращением нового значения доступа.
Задача, которая создала новые задачи и инициировала их активации (инициатор), блокируется до тех пор, пока все эти активации не завершатся (успешно или нет). После завершения всех этих активаций, если активация любой из задач завершилась неудачно (из-за распространения исключения), Tasking_Error поднимается в инициаторе в месте, в котором он инициировал активации. В противном случае инициатор продолжает свое выполнение нормально. Любые задачи, которые прерываются до завершения их активации, игнорируются при определении того, следует ли поднимать Tasking_Error.
Если задача, создавшая новые задачи, никогда не достигает точки, в которой она инициирует активации (из-за прерывания или повышения исключения), вновь созданные задачи завершаются и никогда не активируются.
ПРИМЕЧАНИЯ
5 Вход задачи может быть вызван до активации задачи.
6 Если несколько задач активируются вместе, выполнение любой из этих задач не должно ожидать окончания активации других задач.
7 Задача может стать завершенной во время своей активации либо из-за исключения, либо из-за прерывания (см. 9.8).

Примеры

Пример активации задачи:
процедура P is
A, B : Server; -- разработать объекты задач A, B
C : Server; -- разработать объект задачи C
begin
-- задачи A, B, C активируются вместе до первого оператора
...
end;


Spec-Zone.ru

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