Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

C.7.1 Пакет Task_Identification

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

Существует следующий определяемый языком библиотечный пакет:
package Ada.Task_Identification
with Preelaborate, Nonblocking, Global => in out synchronized is
type Task_Id is private
with Preelaborable_Initialization;
Null_Task_Id : constant Task_Id;
function "=" (Left, Right : Task_Id) return Boolean;
function Image (T : Task_Id) return String;
function Current_Task return Task_Id;
function Environment_Task return Task_Id;
procedure Abort_Task (T : in Task_Id)
with Nonblocking => False;
function Is_Terminated (T : Task_Id) return Boolean;
function Is_Callable (T : Task_Id) return Boolean;
function Activation_Is_Complete (T : Task_Id) return Boolean;
private
... -- не определено языком
end Ada.Task_Identification;

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

Значение типа Task_Id идентифицирует существующую задачу. Константа Null_Task_Id не идентифицирует никакую задачу. Каждый объект типа Task_Id инициализируется по умолчанию значением Null_Task_Id.
Функция "=" возвращает True тогда и только тогда, когда Left и Right идентифицируют одну и ту же задачу или обе имеют значение Null_Task_Id.
Функция Image возвращает определяемую реализацией строку, которая идентифицирует T. Если T равно Null_Task_Id, Image возвращает пустую строку.
Функция Current_Task возвращает значение, которое идентифицирует вызывающую задачу.
Функция Environment_Task возвращает значение, которое идентифицирует задачу окружения.
Эффект Abort_Task такой же, как и оператор abort_statement для задачи, идентифицируемой T. Кроме того, если T идентифицирует задачу окружения, вся партиция прерывается, см. E.1.
Функции Is_Terminated и Is_Callable возвращают значение соответствующего атрибута задачи, идентифицируемой T.
Функция Activation_Is_Complete возвращает True, если задача, идентифицируемая T, завершила свою активацию (успешно или нет). В противном случае возвращается False. Если T идентифицирует задачу окружения, Activation_Is_Complete возвращает True после завершения разработки library_itemов партиции.
Для префикса T типа задачи (после любого неявного разыменования) определен следующий атрибут:
T'Identity
Возвращает значение типа Task_Id, которое идентифицирует задачу, обозначенную T.
Для префикса E, обозначающего entry_declaration, определен следующий атрибут:
E'Caller
Возвращает значение типа Task_Id, которое идентифицирует задачу, вызов которой сейчас обслуживается. Использование этого атрибута разрешено только внутри оператора accept_statement или entry_body после entry_barrier, соответствующего entry_declaration, обозначенного E.
Программа_ошибка генерируется, если значение Null_Task_Id передается в качестве параметра в Abort_Task, Activation_Is_Complete, Is_Terminated и Is_Callable.
Этот абзац был удален.

Ограниченные (временные) ошибки

Вызов функции Current_Task из entry_body, обработчика прерываний или завершения атрибута задачи является ограниченной ошибкой. Возникает ошибка Program_Error или возвращается определяемое реализацией значение типа Task_Id.

Ошибка выполнения

Если значение Task_Id передается в качестве параметра в любую операцию, объявленную в этом пакете (или любом определяемом языком подпакете), а соответствующий объект задачи больше не существует, выполнение программы является ошибочным.

Требования к документации

Реализация должна документировать эффект вызова Current_Task из тела входа или обработчика прерываний.
ПРИМЕЧАНИЕ 1 Этот пакет предназначен для использования при написании пользовательских пакетов планирования задач и создания задач-серверов. Current_Task может использоваться совместно с другими операциями, требующими задачу в качестве аргумента, такими как Set_Priority (см. D.5).
ПРИМЕЧАНИЕ 2 Функция Current_Task и атрибут Caller могут возвращать значение Task_Id, которое идентифицирует задачу окружения.


Spec-Zone.ru

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