Ада-95. Компилятор GNAT
66ac8edd

Идентификация задач и атрибуты


Каждая задача (объект) Ады имеет свой собственный уникальный идентификатор, с помощью которого она может быть идентифицирована в других задачах.

Механизм, с помощью которого задача может получить свой уникальный идентификатор, обеспечивается средствами стандартного пакета Ada.Task_Identification, описанного в приложении C (Annex C) стандарта Ada95, в котором указываются требования для системного программирования.

Спецификация пакета Ada.Task_Identification имеет следующий вид:

package Ada.Task_Identification is

type Task_ID is private; 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;

procedure Abort_Task (T : in out Task_ID);

function Is_Terminated(T : Task_ID) return Boolean; function Is_Callable (T : Task_ID) return Boolean;

private

. . . -- Стандартом языка не определено

end Ada.Task_Identification;



Кроме этого пакета, в приложении C стандарта описываются атрибуты, которые могут быть использованы для идентификации задач:

T'Identity где T: любая задача.

Возвращает значение типа Task_ID которое уникально идентифицирует T.

E'Caller  -  где E: имя любого входа задачи.

Возвращает значение типа Task_ID, которое идентифицирует обрабатываемую в текущий момент задачу, обратившуюся к входу задачи E. Использование этого атрибута допустимо только внутри инструкции принятия (для задачи-сервера).

При использовании этих средств следует учитывать, что по истечении некоторого времени ничто не гарантирует активность задачи или ее присутствие в области видимости.

Кроме перечисленных средств идентификации, при работе с задачами могут быть также использованы следующие атрибуты:

T'Callable  -  Возвращает значение True, если задача T может быть вызвана.
T'Terminated  -  Возвращает True если выполнение задачи T прекращено.

Следует учесть, что T - это любая задача а результат, возвращаемый этими атрибутами, имеет предопределенный логический тип Standard.Boolean.

Для входов (и семейств входов) задач определен атрибут 'Count.

Если E - имя любого входа задачи, то E'Count

возвращает значение типа Universal_Integer, показывающее число обращений к входу E, которые находятся в очереди.

Исползование этого атрибута допустимо только внутри тела задачи или внутри программного модуля, который расположен внутри тела задачи.

Следует заметить, что не рекомендуется, чтобы алгоритм обработки имел жесткую зависимость от значений атрибутов задач 'Callable и 'Terminated, а также атрибута 'Count для входов (и семейств входов).



Содержание раздела