Справочник по Ada 2005
D.2.4 Непрерывная обработка задач
Этот пункт определяет политику обработки задач без приостановки.
Статическая семантика
Политика policy_идентификатор Non_Preemptive_FIFO_Within_Priorities является политикой обработки задач.
Правила допустимости
Non_Preemptive_FIFO_Within_Priorities не должен быть указан как policy_идентификатор для директивы Priority_Specific_Dispatching (см. D.2.2).
Динамическая семантика
Когда активна политика Non_Preemptive_FIFO_Within_Priorities, изменения в очередях готовых задач происходят только следующим образом:
- Когда заблокированная задача становится готовой, она добавляется в конец очереди готовых задач для ее активного приоритета.
- Когда активный приоритет готовой задачи, которая не выполняется, изменяется, или вступает в силу установка ее базового приоритета, задача удаляется из очереди готовых задач для ее старого активного приоритета и добавляется в конец очереди готовых задач для ее нового активного приоритета.
- Когда вступает в силу установка базового приоритета выполняющейся задачи, задача добавляется в конец очереди готовых задач для ее активного приоритета.
- Когда задача выполняет заявление_ожидания, которое не приводит к блокированию, она добавляется в конец очереди готовых задач для ее активного приоритета.
Для этой политики, неблокирующее заявление_ожидания является единственным неблокирующим событием, являющимся точкой обработки задач (см. D.2.1).
Требования к реализации
Реализация должна позволять для одной секции задать политику обработки задач как Non_Preemptive_FIFO_Within_Priorities, а также политику блокировки (см. D.3) как Ceiling_Locking.
Разрешения на реализацию
Поскольку реализациям разрешается округлять все потолочные приоритеты в поддиапазоне System.Priority до System.Priority'Last (см. D.3), реализация может позволить задаче выполняться в защищенном объекте без повышения ее активного приоритета при условии, что связанный защищенный блок не содержит директивы Interrupt_Priority, Interrupt_Handler или Attach_Handler.