avrora.sim.clock
Class Synchronizer

java.lang.Object
  extended byavrora.sim.clock.Synchronizer
Direct Known Subclasses:
IntervalSynchronizer, SingleSimulation.SingleSynchronizer, StepSynchronizer

public abstract class Synchronizer
extends java.lang.Object

The Synchronizer class represents an object that controls the progress of a multi-node simulation. The synchronizer preserves the timing and order of events that influence other nodes' actions (e.g. communication). Since there are multiple strategies for doing this, this class abstracts the actual mechanism so that clients can simply create the appropriate synchronizer for their simulation.


Constructor Summary
Synchronizer()
           
 
Method Summary
abstract  void addNode(Simulation.Node n)
          The addNode() method adds a node to this synchronization group.
abstract  void join()
          The join() method will block the caller until all of the threads in this synchronization interval have terminated, either through stop() being called, or terminating normally such as through a timeout.
abstract  void pause()
          The pause() method temporarily pauses the simulation.
abstract  void removeNode(Simulation.Node n)
          The removeNode() method removes a node from this synchronization group, and wakes any nodes that might be waiting on it.
abstract  void start()
          The start() method starts the threads executing, and the synchronizer will add whatever synchronization to their execution that is necessary to preserve the global timing properties of simulation.
abstract  void stop()
          The stop() method will terminate all the simulation threads.
abstract  void synch(long globalTime)
          The synch() method will pause all of the nodes at the same global time.
abstract  void waitForNeighbors(long time)
          The waitForNeighbors() method is called from within the execution of a node when that node needs to wait for its neighbors to catch up to it in execution time.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Synchronizer

public Synchronizer()
Method Detail

addNode

public abstract void addNode(Simulation.Node n)
The addNode() method adds a node to this synchronization group. This method should only be called before the start() method is called.

Parameters:
n - the simulator representing the node to add to this group

removeNode

public abstract void removeNode(Simulation.Node n)
The removeNode() method removes a node from this synchronization group, and wakes any nodes that might be waiting on it.

Parameters:
n - the simulator thread to remove from this synchronization group

waitForNeighbors

public abstract void waitForNeighbors(long time)
The waitForNeighbors() method is called from within the execution of a node when that node needs to wait for its neighbors to catch up to it in execution time. The node will be blocked until the other nodes in other threads catch up in global time.


start

public abstract void start()
The start() method starts the threads executing, and the synchronizer will add whatever synchronization to their execution that is necessary to preserve the global timing properties of simulation.


join

public abstract void join()
                   throws java.lang.InterruptedException
The join() method will block the caller until all of the threads in this synchronization interval have terminated, either through stop() being called, or terminating normally such as through a timeout.

Throws:
java.lang.InterruptedException

pause

public abstract void pause()
The pause() method temporarily pauses the simulation. The nodes are not guaranteed to stop at the same global time. This method will return when all threads in the simulation have been paused and will no longer make progress until the start() method is called again.


stop

public abstract void stop()
The stop() method will terminate all the simulation threads. It is not guaranteed to stop all the simulation threads at the same global time.


synch

public abstract void synch(long globalTime)
The synch() method will pause all of the nodes at the same global time. This method can only be called when the simulation is paused. It will run all threads forward until the global time specified and pause them.

Parameters:
globalTime - the global time in clock cycles to run all threads ahead to