D.10 Synchronous Task Control
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
The following language-defined
Suspension_Object is limited private
Set_True(S : in out
Set_False(S : in out
Current_State(S : Suspension_Object) return
Suspend_Until_True(S : in out
... -- not specified by the language
The type Suspension_Object is a by-reference type.
An object of the type Suspension_Object has two visible
states: True and False. Upon initialization, its value is set to False.
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.
Current_State returns the current state of the object.
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.
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
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.