D.10.1 Synchronous Barriers
This subclause introduces a language-defined package
to synchronously release a group of tasks after the number of blocked
tasks reaches a specified count value.
The following language-defined library package
package Ada.Synchronous_Barriers is
subtype Barrier_Limit is Positive range 1 .. implementation-defined;
The value of Barrier_Limit'Last in Synchronous_Barriers.
type Synchronous_Barrier (Release_Threshold : Barrier_Limit) is limited private;
procedure Wait_For_Release (The_Barrier : in out Synchronous_Barrier;
Notified : out Boolean);
-- not specified by the language
Each call to Wait_For_Release blocks the calling
task until the number of blocked tasks associated with the Synchronous_Barrier
object is equal to Release_Threshold, at which time all blocked tasks
are released. Notified is set to True for one of the released tasks,
and set to False for all other released tasks.
The mechanism for determining which task sets Notified
to True is implementation defined.
Once all tasks have been released, a Synchronous_Barrier
object may be reused to block another Release_Threshold number of tasks.
As the first step of the finalization of a Synchronous_Barrier,
each blocked task is unblocked and Program_Error is raised at the place
of the call to Wait_For_Release.
It is implementation defined whether an abnormal
task which is waiting on a Synchronous_Barrier object is aborted immediately
or aborted when the tasks waiting on the object are released.
When an aborted task that is waiting
on a Synchronous_Barrier is aborted.
Bounded (Run-Time) Errors
It is a bounded error to call Wait_For_Release
on a Synchronous_Barrier object after that object is finalized. If the
error is detected, Program_Error is raised. Otherwise, the call proceeds
normally, which may leave a task blocked forever.
Extensions to Ada 2005
The package Ada.Synchronous_Barriers
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe