Non-Preemptive Dispatching
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Ada Reference Manual — Legal Information

# D.2.4 Non-Preemptive Dispatching

1/2
This clause defines a non-preemptive task dispatching policy.

#### Static Semantics

2/2
The policy_ identifier Non_Preemptive_FIFO_Within_Priorities is a task dispatching policy.

#### Legality Rules

3/2
Non_Preemptive_FIFO_Within_Priorities shall not be specified as the policy_ identifier of pragma Priority_Specific_Dispatching (see D.2.2).

#### Dynamic Semantics

4/2
When Non_Preemptive_FIFO_Within_Priorities is in effect, modifications to the ready queues occur only as follows:
5/2

- When a blocked task becomes ready, it is added at the tail of the ready queue for its active priority.

6/2

- When the active priority of a ready task that is not running changes, or the setting of its base priority takes effect, the task is removed from the ready queue for its old active priority and is added at the tail of the ready queue for its new active priority.

7/2

- When the setting of the base priority of a running task takes effect, the task is added to the tail of the ready queue for its active priority.

8/2

- When a task executes a delay_statement that does not result in blocking, it is added to the tail of the ready queue for its active priority.

9/2
For this policy, a non-blocking delay_statement is the only non-blocking event that is a task dispatching point (see D.2.1).

#### Implementation Requirements

10/2
An implementation shall allow, for a single partition, both the task dispatching policy to be specified as Non_Preemptive_FIFO_Within_Priorities and also the locking policy (see D.3) to be specified as Ceiling_Locking.

#### Implementation Permissions

11/2
Since implementations are allowed to round all ceiling priorities in subrange System.Priority to System.Priority'Last (see D.3), an implementation may allow a task to execute within a protected object without raising its active priority provided the associated protected unit does not contain pragma Interrupt_Priority, Interrupt_Handler, or Attach_Handler.

Sponsored by Ada-Europe