Приоритеты задач
Приоритеты задач
Каждая задача Ады может обладать своим собственным приоритетом выполнения, который задается с помощью директивы компилятора Priority:
pragma Priority ( expression ); |
Непосредственное использование этой директивы компилятора допускается:
- внутри спецификации задачи,
- внутри спецификации защищенного типа или объекта,
- в описательной части тела подпрограммы
Значение результата выражения expression,
используемого для непосредственного указания приоритета,
должно принадлежать целочисленному типу Integer,
причем при указании директивы Priority в описательной части тела подпрограммы
выражение expression должно быть статическим,
а его значение должно принадлежать диапазону значений подтипа Priority,
который описан в пакете System.Например:
task Some_Task is pragma Priority (5); . . . end Some_Task; |
Приоритет выполнения задачи определяет ее привилегии на обладание системными ресурсами (например, процессором).В простейшем случае, если две задачи с разными приоритетами готовы к выполнению, то к выполнению будет допущена та задача, приоритет которой выше.При равенстве приоритетов порядок выполнения задач не определен.
В Ada83 приоритет задачи строго фиксировался при ее описании.Согласно стандарту Ada95, приоритет задачи может быть изменен в процессе существования задачи (кроме приоритета, указанного для подпрограммы), то есть задачи могут иметь динамически изменяемые приоритеты.
Средства динамического определения и изменения текущего приоритета задачи предоставляются предопределенным стандартным пакетом Ada.Dynamic_Priorities.Спецификация этого пакета проста и имеет следующий вид:
with System; with Ada.Task_Identification; -- спецификация этого пакета обсуждается в 1, -- при рассмотрении вопроса идентификации задач package Ada.Dynamic_Priorities is procedure Set_Priority (Priority : in System.Any_Priority; T : in Ada.Task_Identification.Task_ID := Ada.Task_Identification.Current_Task); function Get_Priority (T : Ada.Task_Identification.Task_ID := Ada.Task_Identification.Current_Task) return System.Any_Priority;end Ada.Dynamic_Priorities; |
Следует заметить, что правила планирования выполнения задач на основе статических и динамических приоритетов рассматриваются в приложении D (Annex D) стандарта Ada95, в котором указываются требования для систем реального времени.