D.10.1 Synchronous Barriers
{
AI05-0174-1}
{
AI05-0299-1}
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.
Static Semantics
{
AI05-0174-1}
The following language-defined library package exists:
{
AI12-0241-1}
{
AI12-0302-1}
package Ada.Synchronous_Barriers
with Preelaborate, Nonblocking, Global =>
in out synchronized is
subtype Barrier_Limit
is Positive
range 1 ..
implementation-defined;
Implementation defined: The value of
Barrier_Limit'Last in Synchronous_Barriers.
type Synchronous_Barrier (Release_Threshold : Barrier_Limit)
is limited private;
{
AI12-0241-1}
procedure Wait_For_Release (The_Barrier :
in out Synchronous_Barrier;
Notified :
out Boolean)
with Nonblocking => False;
private
-- not specified by the language
end Ada.Synchronous_Barriers;
Dynamic Semantics
{
AI05-0174-1}
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.
{
AI05-0174-1}
The mechanism for determining which task sets Notified to True is implementation
defined.
{
AI05-0174-1}
Once all tasks have been released, a Synchronous_Barrier object may be
reused to block another Release_Threshold number of tasks.
{
AI05-0174-1}
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.
{
AI05-0174-1}
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
{
AI05-0174-1}
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
{
AI05-0174-1}
The package Ada.Synchronous_Barriers is new.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe