jbarrier

edu.bonn.cs.net.jbarrier.barrier
Class StaticTreeBarrier

java.lang.Object
  extended by edu.bonn.cs.net.jbarrier.barrier.AbstractBarrier
      extended by edu.bonn.cs.net.jbarrier.barrier.StaticTreeBarrier
All Implemented Interfaces:
Barrier
Direct Known Subclasses:
DoubleStaticTreeReduction, FloatStaticTreeReduction, IntStaticTreeReduction, LongStaticTreeReduction

public class StaticTreeBarrier
extends AbstractBarrier

Implementation of a static tree barrier algorithm. The static tree barrier was introduced in the following article:

J. M. Mellor-Crummey and M. L. Scott. "Algorithms for Scalable Synchronization on Shared-Memory Multiprocessors". In ACM Transactions on Computer Systems, volume 9, pages 21-65, 1991.

A good introduction to different barrier synchronization algorithms an be found in the following technical report:

C. Ball and M. Bull. "Barrier Synchronisation in Java".

At the time of writing the report is available online at www.ukhec.ac.uk/publications/reports/synch_java.pdf

Version:
1.0
Author:
Patrick Peschlow, Ivan Castilla Rodriguez

Nested Class Summary
protected  class StaticTreeBarrier.StaticTreeBarrierParty
          Stores data required by each party that uses the barrier.
 
Field Summary
protected  boolean flagOut_
          Out flag set by the winner.
protected  java.util.concurrent.atomic.AtomicBoolean[] flags_
          The synchronization flags (one for each party).
protected  StaticTreeBarrier.StaticTreeBarrierParty[] parties_
          The barrier data associated to each party.
 
Fields inherited from class edu.bonn.cs.net.jbarrier.barrier.AbstractBarrier
action_, genericReductor_, numParties_
 
Constructor Summary
StaticTreeBarrier(int numParties)
          Constructor.
StaticTreeBarrier(int numParties, java.lang.Runnable barrierAction)
          Constructor.
StaticTreeBarrier(int numParties, java.lang.Runnable barrierAction, GenericReductor genericReductor)
          Constructor.
 
Method Summary
 void await(int threadId)
          Called by a party that reaches the barrier.
protected  void setUpParties()
          Sets up the parties array, intended to be overridden in subclasses.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

parties_

protected StaticTreeBarrier.StaticTreeBarrierParty[] parties_
The barrier data associated to each party.


flags_

protected final java.util.concurrent.atomic.AtomicBoolean[] flags_
The synchronization flags (one for each party).


flagOut_

protected volatile boolean flagOut_
Out flag set by the winner.

Constructor Detail

StaticTreeBarrier

public StaticTreeBarrier(int numParties,
                         java.lang.Runnable barrierAction,
                         GenericReductor genericReductor)
Constructor.

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
barrierAction - the command to execute when the barrier is tripped, or null if there is no action
genericReductor - an optional generic reductor
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two

StaticTreeBarrier

public StaticTreeBarrier(int numParties,
                         java.lang.Runnable barrierAction)
Constructor.

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
barrierAction - the command to execute when the barrier is tripped, or null if there is no action
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two

StaticTreeBarrier

public StaticTreeBarrier(int numParties)
Constructor.

Parameters:
numParties - the number of parties that must reach the barrier before the barrier is tripped
Throws:
java.lang.IllegalArgumentException - if numParties is not a power of two
Method Detail

setUpParties

protected void setUpParties()
Sets up the parties array, intended to be overridden in subclasses.


await

public void await(int threadId)
Called by a party that reaches the barrier.

Specified by:
await in interface Barrier
Specified by:
await in class AbstractBarrier
Parameters:
threadId - the ID of the party

jbarrier

Copyright 2010 Patrick Peschlow