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. 
Static Semantics
The following language-defined 
library package exists: 
package Ada.Synchronous_Barriers 
is
   pragma Preelaborate(Synchronous_Barriers);
 
   subtype Barrier_Limit 
is Positive 
range 1 .. 
implementation-defined;
 
   type Synchronous_Barrier (Release_Threshold : Barrier_Limit) 
is limited private;
 
   procedure Wait_For_Release (The_Barrier : 
in out Synchronous_Barrier;
                               Notified    :    
out Boolean);
 
private
   -- not specified by the language
end Ada.Synchronous_Barriers;
Type Synchronous_Barrier needs finalization (see 
7.6). 
 
Dynamic Semantics
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. 
 Wait_For_Release is a potentially blocking operation 
(see 
9.5.1). 
 
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. 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe