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 exists:
Preelaborate, Nonblocking, Global => in out synchronized is(Synchronous_Barriers);
1 .. implementation-defined
Implementation defined: The value of
Barrier_Limit'Last in Synchronous_Barriers.
Synchronous_Barrier (Release_Threshold : Barrier_Limit) is limited private
Wait_For_Release (The_Barrier : in out
Notified : out
with Nonblocking => False
-- 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
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.
Implementation defined: 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
Extensions to Ada 2005
The package Ada.Synchronous_Barriers is new.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe