Ada Reference Manual — Legal Information

D.10 Synchronous Task Control

1

This clause describes a language-defined private semaphore (suspension object), which can be used for two-stage suspend operations and as a simple building block for implementing higher-level queues.

Static Semantics

2

The following language-defined package exists:

3/2

package Ada.Synchronous_Task_Control is

pragma Preelaborate(Synchronous_Task_Control); Ada.Synchronous_Task_ControlPreelaborate(Synchronous_Task_Control);

4

type is limited private;

procedure in out Suspension_Object);

procedure in out Suspension_Object);

function return Boolean;

procedure in out Suspension_Object);

private

... -- not specified by the language

end Ada.Synchronous_Task_Control; Suspension_Object Set_True(S :Suspension_Object); Set_False(S :Suspension_Object); Current_State(S : Suspension_Object)Boolean; Suspend_Until_True(S :Suspension_Object);... --Ada.Synchronous_Task_Control;

5

The type Suspension_Object is a by-reference type.

Dynamic Semantics

6/2

An object of the type Suspension_Object has two visible states: True and False. Upon initialization, its value is set to False.

7/2

The operations Set_True and Set_False are atomic with respect to each other and with respect to Suspend_Until_True; they set the state to True and False respectively.

8

Current_State returns the current state of the object.

9/2

The procedure Suspend_Until_True blocks the calling task until the state of the object S is True; at that point the task becomes ready and the state of the object becomes False.

10

Program_Error is raised upon calling Suspend_Until_True if another task is already waiting on that suspension object. Suspend_Until_True is a potentially blocking operation (see 9.5.1 ).

Implementation Requirements

11

The implementation is required to allow the calling of Set_False and Set_True during any protected action, even one that has its ceiling priority in the Interrupt_Priority range.