Package edu.rit.pj

Class ParallelRegion

Direct Known Subclasses:
BornGradRegion, BornRadiiRegion, BulkSolventList, ConnollyRegion, DirectRegion, DispersionRegion, DistanceRegion, EnergyRegion, ExpandInducedDipolesRegion, GKEnergyRegion, GoldsteinPairRegion, HydrophobicPMFRegion, InducedDipoleFieldReduceRegion, InducedDipoleFieldRegion, InducedGKFieldRegion, InitializationRegion, InitializationRegion, KillRegion, NeighborList, OPTRegion, PermanentFieldRegion, PermanentGKFieldRegion, PolarizationEnergyRegion, RealSpaceEnergyRegion, ReciprocalEnergyRegion, ReciprocalSpace.BSplineRegion, ReduceRegion, RowRegion, SliceRegion, SORRegion, SpatialDensityRegion, SurfaceAreaRegion

public abstract class ParallelRegion extends ParallelConstruct
Class ParallelRegion is the abstract base class for a parallel region that is executed by a ParallelTeam of threads.

To execute a parallel region, create a ParallelTeam object; create an instance of a concrete subclass of class ParallelRegion; and pass this instance to the parallel team's execute() method. You can do all this using an anonymous inner class; for example:

     new ParallelTeam().execute (new ParallelRegion()
         {
         // Shared variable declarations
         . . .
         public void start()
             {
             // Initialization code
             . . .
             }
         public void run()
             {
             // Thread private variable declarations
             // Parallel code
             . . .
             }
         public void finish()
             {
             // Finalization code
             . . .
             }
         });
 

The parallel team's execute() method does the following. The parallel team has a certain number of threads K, where K was specified when the parallel team was constructed. The main thread is the thread calling the parallel team's execute() method. The main thread calls the parallel region's start() method. When the start() method returns, all the team threads call the parallel region's run() method concurrently. When all the team threads have returned from the run() method, the main thread calls the parallel region's finish() method. When the finish() method returns, the main thread returns from the parallel team's execute() method.

Variables to be shared by all threads in the team may be declared as fields of the ParallelRegion subclass. The start() method is intended for performing initialization in a single thread before parallel execution begins. If no such initialization is needed, omit the start() method. The run() method contains code to be executed in parallel by all threads in the team. Variables that are private to each thread may be declared inside the run() method. The finish() method is intended for performing finalization in a single thread after parallel execution ends. If no such finalization is needed, omit the finish() method.

If the parallel region's start() method throws an exception, the parallel team's execute() method throws that same exception, and the run() method is not called.

If the parallel region's run() method throws an exception in one of the team threads, the exception's stack trace is printed on the standard error, the parallel team waits until all the other team threads have returned from the run() method, then the parallel team's execute() method throws that same exception, and the parallel region's finish() method is not called. If the parallel region's run() method throws an exception in more than one of the team threads, each exception's stack trace is printed on the standard error, the parallel team waits until all the other team threads have returned from the run() method, then the parallel team's execute() method throws a MultipleParallelException wrapping all the thrown exceptions, and the parallel region's finish() method is not called.

If the parallel region's finish() method throws an exception, the parallel team's execute() method throws that same exception.

Version:
11-Nov-2007
Author:
Alan Kaminsky
  • Constructor Details

    • ParallelRegion

      public ParallelRegion()
      Construct a new parallel region.
  • Method Details

    • start

      public void start() throws Exception
      Perform initialization actions before parallel execution begins. Only one thread calls the start() method.

      The start() method may be overridden in a subclass. If not overridden, the start() method does nothing.

      Throws:
      Exception - The start() method may throw any exception.
      Exception - if any.
    • run

      public abstract void run() throws Exception
      Execute parallel code. All threads of the parallel team call the run() method concurrently.

      The run() method must be implemented in a subclass.

      Throws:
      Exception - The run() method may throw any exception.
      Exception - if any.
    • finish

      public void finish() throws Exception
      Perform finalization actions after parallel execution ends. Only one thread calls the finish() method.

      The finish() method may be overridden in a subclass. If not overridden, the finish() method does nothing.

      Throws:
      Exception - The finish() method may throw any exception.
      Exception - if any.
    • execute

      public final void execute(int first, int last, IntegerForLoop theLoop) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class IntegerForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of +1. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      theLoop - Parallel for loop.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLoop is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(int first, int last, IntegerForLoop theLoop, BarrierAction action) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class IntegerForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of +1. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      theLoop - Parallel for loop.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLoop is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(int first, int last, int stride, IntegerStrideForLoop theLoop) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class IntegerStrideForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of stride. The stride must be positive. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      stride - Loop index stride, >= 1.
      theLoop - Parallel for loop.
      Throws:
      IllegalArgumentException - (unchecked exception) Thrown if stride < 1.
      NullPointerException - (unchecked exception) Thrown if theLoop is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(int first, int last, int stride, IntegerStrideForLoop theLoop, BarrierAction action) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class IntegerStrideForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of stride. The stride must be positive. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      stride - Loop index stride, >= 1.
      theLoop - Parallel for loop.
      action - Barrier action.
      Throws:
      IllegalArgumentException - (unchecked exception) Thrown if stride < 1.
      NullPointerException - (unchecked exception) Thrown if theLoop is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(long first, long last, LongForLoop theLoop) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class LongForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of +1. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      theLoop - Parallel for loop.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLoop is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(long first, long last, LongForLoop theLoop, BarrierAction action) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class LongForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of +1. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      theLoop - Parallel for loop.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLoop is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(long first, long last, long stride, LongStrideForLoop theLoop) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class LongStrideForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of stride. The stride must be positive. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      stride - Loop index stride, >= 1.
      theLoop - Parallel for loop.
      Throws:
      IllegalArgumentException - (unchecked exception) Thrown if stride < 1.
      NullPointerException - (unchecked exception) Thrown if theLoop is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(long first, long last, long stride, LongStrideForLoop theLoop, BarrierAction action) throws Exception
      Execute a parallel for loop within this parallel region. For further information, see class LongStrideForLoop. The loop index goes from first (inclusive) to last (inclusive) in steps of stride. The stride must be positive. If first is greater than last, then no loop iterations are performed. At the end of the parallel for loop, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      first - First loop index.
      last - Last loop index.
      stride - Loop index stride, >= 1.
      theLoop - Parallel for loop.
      action - Barrier action.
      Throws:
      IllegalArgumentException - (unchecked exception) Thrown if stride < 1.
      NullPointerException - (unchecked exception) Thrown if theLoop is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theLoop's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(T[] theArray, ParallelIteration<T> theIteration) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the elements of the given array. The iteration order is from index 0 upwards. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theArray - Array containing the items.
      theIteration - Parallel iteration.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theArray is null or theIteration is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(T[] theArray, ParallelIteration<T> theIteration, BarrierAction action) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the elements of the given array. The iteration order is from index 0 upwards. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theArray - Array containing the items.
      theIteration - Parallel iteration.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theArray is null. Thrown if theIteration is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(Iterator<T> theIterator, ParallelIteration<T> theIteration) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items returned by the given iterator. The iteration order is that of the given iterator. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theIterator - Iterator over the items.
      theIteration - Parallel iteration.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theIterator is null or theIteration is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(Iterator<T> theIterator, ParallelIteration<T> theIteration, BarrierAction action) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items returned by the given iterator. The iteration order is that of the given iterator. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theIterator - Iterator over the items.
      theIteration - Parallel iteration.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theIterator is null. Thrown if theIteration is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(Iterable<T> theIterable, ParallelIteration<T> theIteration) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items contained in the given iterable collection. The iteration order is that of the given iterable collection's iterator. At the end of the parallel iteration, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theIterable - Iterable collection containing the items.
      theIteration - Parallel iteration.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theIterable is null or theIteration is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final <T> void execute(Iterable<T> theIterable, ParallelIteration<T> theIteration, BarrierAction action) throws Exception
      Execute a parallel iteration within this parallel region. For further information, see class ParallelIteration. The items processed by the iteration are the items contained in the given iterable collection. The iteration order is that of the given iterable collection's iterator. At the end of the parallel iteration, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Type Parameters:
      T - Data type of the items iterated over.
      Parameters:
      theIterable - Iterable collection containing the items.
      theIteration - Parallel iteration.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theIterable is null. Thrown if theIteration is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of theIteration's methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section) throws Exception
      Execute a parallel section within this parallel region. The parallel section's run() method is called by one of the parallel team threads. For further information, see class ParallelSection. At the end of the parallel section, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section - Parallel section.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if the parallel section's run() method throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section, BarrierAction action) throws Exception
      Execute a parallel section within this parallel region. The parallel section's run() method is called by one of the parallel team threads. For further information, see class ParallelSection. At the end of the parallel section, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section - Parallel section.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if the parallel section's run() method throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section1, ParallelSection section2) throws Exception
      Execute a group of two parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section1 - First parallel section.
      section2 - Second parallel section.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section1 is null. Thrown if section2 is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section1, ParallelSection section2, BarrierAction action) throws Exception
      Execute a group of two parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section1 - First parallel section.
      section2 - Second parallel section.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section1 is null. Thrown if section2 is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section1, ParallelSection section2, ParallelSection section3) throws Exception
      Execute a group of three parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section1 - First parallel section.
      section2 - Second parallel section.
      section3 - Third parallel section.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section1 is null. Thrown if section2 is null. Thrown if section3 is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection section1, ParallelSection section2, ParallelSection section3, BarrierAction action) throws Exception
      Execute a group of three parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      section1 - First parallel section.
      section2 - Second parallel section.
      section3 - Third parallel section.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if section1 is null. Thrown if section2 is null. Thrown if section3 is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection[] sections) throws Exception
      Execute a group of parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      sections - Parallel sections.
      Throws:
      NullPointerException - (unchecked exception) Thrown if any of the sections is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • execute

      public final void execute(ParallelSection[] sections, BarrierAction action) throws Exception
      Execute a group of parallel sections concurrently within this parallel region. Each parallel section's run() method is called by a different parallel team thread. For further information, see class ParallelSection. At the end of the parallel section group, the parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the execute() method with identical arguments, or none of the threads must call the execute() method.

      Parameters:
      sections - Parallel sections.
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if any of the sections is null. Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if one of the parallel sections' run() methods throws an exception.
      Exception - if any.
    • critical

      public final void critical(ParallelSection theSection) throws Exception
      Perform a section of code in a critical region with exclusive locking. The locking is performed using the default lock, a hidden Lock variable shared by all the parallel team threads. The thread calling the critical() method waits until no other thread is executing a critical region with exclusive locking using the default lock and no other thread is executing a critical region with nonexclusive locking using the default lock. The thread then calls theSection's run() method with exclusive locking using the default lock. When the run() method returns, the thread unlocks the lock and returns from the critical() method.

      If the parallel section's run() method throws an exception, the critical() method throws that same exception in the thread that called the run() method (after unlocking the lock).

      Parameters:
      theSection - Parallel section to execute in the critical region.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theSection is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if theSection's run() method throws an exception.
      Exception - if any.
    • criticalNonexclusive

      public final void criticalNonexclusive(ParallelSection theSection) throws Exception
      Perform a section of code in a critical region with nonexclusive locking. The locking is performed using the default lock, a hidden Lock variable shared by all the parallel team threads. The thread calling the critical() method waits until no other thread is executing a critical region with exclusive locking using the default lock. However, any number of other threads may be executing a critical region with nonexclusive locking using the default lock. The thread then calls theSection's run() method with nonexclusive locking using the default lock. When the run() method returns, the thread unlocks the lock and returns from the critical() method.

      If the parallel section's run() method throws an exception, the critical() method throws that same exception in the thread that called the run() method (after unlocking the lock).

      Parameters:
      theSection - Parallel section to execute in the critical region.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theSection is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if theSection's run() method throws an exception.
      Exception - if any.
    • critical

      public final void critical(Lock theLock, ParallelSection theSection) throws Exception
      Perform a section of code in a critical region with exclusive locking using the given lock. The thread calling the critical() method waits until no other thread is executing a critical region with exclusive locking using the given lock and no other thread is executing a critical region with nonexclusive locking using the given lock. The thread then calls theSection's run() method with exclusive locking using the given lock. When the run() method returns, the thread unlocks the lock and returns from the critical() method.

      If the parallel section's run() method throws an exception, the critical() method throws that same exception in the thread that called the run() method (after unlocking the lock).

      Parameters:
      theLock - Lock.
      theSection - Parallel section to execute in the critical region.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLock is null or theSection is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if theSection's run() method throws an exception.
      Exception - if any.
    • criticalNonexclusive

      public final void criticalNonexclusive(Lock theLock, ParallelSection theSection) throws Exception
      Perform a section of code in a critical region with nonexclusive locking using the given lock. The thread calling the critical() method waits until no other thread is executing a critical region with exclusive locking using the given lock. However, any number of other threads may be executing a critical region with nonexclusive locking using the given lock. The thread then calls theSection's run() method with nonexclusive locking using the given lock. When the run() method returns, the thread unlocks the lock and returns from the critical() method.

      If the parallel section's run() method throws an exception, the critical() method throws that same exception in the thread that called the run() method (after unlocking the lock).

      Parameters:
      theLock - Lock.
      theSection - Parallel section to execute in the critical region.
      Throws:
      NullPointerException - (unchecked exception) Thrown if theLock is null or theSection is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if theSection's run() method throws an exception.
      Exception - if any.
    • barrier

      public final void barrier()
      Perform a barrier. The parallel team threads wait for each other at a barrier.

      Note: Either all threads in the parallel team must call the barrier() method, or none of the threads must call the barrier() method.

      Throws:
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
    • barrier

      public final void barrier(BarrierAction action) throws Exception
      Perform a barrier, with a barrier action. The parallel team threads encounter a barrier, and their behavior depends on the given BarrierAction.

      Note: Either all threads in the parallel team must call the barrier() method, or none of the threads must call the barrier() method.

      Parameters:
      action - Barrier action.
      Throws:
      NullPointerException - (unchecked exception) Thrown if action is null.
      IllegalStateException - (unchecked exception) Thrown if no parallel team is executing this parallel region.
      Exception - Thrown if theSection's run() method throws an exception.
      Exception - if any.