avrora.sim.clock
Class StepSynchronizer

java.lang.Object
  extended byavrora.sim.clock.Synchronizer
      extended byavrora.sim.clock.StepSynchronizer

public class StepSynchronizer
extends Synchronizer

The StepSynchronizer class is an implementation of simulator synchronization that steps each node one cycle at a time using the Simulator.step() method of each simulator.


Nested Class Summary
protected  class StepSynchronizer.RunThread
          The RunThread class implements a thread that runs the simulation, to preserve the model that the thread interacting with the synchronizer through calls to start(), stop(), etc. is different than any of the threads running actual simulator code.
 
Field Summary
protected  Simulator.Event action
           
protected  boolean innerLoop
           
protected  int numThreads
           
protected  boolean shouldRun
           
protected  StepSynchronizer.RunThread thread
           
protected  Simulator[] threads
           
 
Constructor Summary
StepSynchronizer(Simulator.Event e)
          The constructor for the StepSynchronizer class creates a new instance of this synchronizer.
 
Method Summary
 void addNode(Simulation.Node n)
          The addNode() method adds a node to this synchronization group.
 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.
 void pause()
          The pause() method temporarily pauses the simulation.
 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.
 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.
 void stop()
          The stop() method will terminate all the simulation threads.
 void synch(long globalTime)
          The synch() method will pause all of the nodes at the same global time.
 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
 

Field Detail

action

protected final Simulator.Event action

threads

protected Simulator[] threads

numThreads

protected int numThreads

shouldRun

protected boolean shouldRun

innerLoop

protected boolean innerLoop

thread

protected StepSynchronizer.RunThread thread
Constructor Detail

StepSynchronizer

public StepSynchronizer(Simulator.Event e)
The constructor for the StepSynchronizer class creates a new instance of this synchronizer. The event passed as a parameter will be fired after each iteration; i.e. when all nodes have been stepped one clock cycle.

Parameters:
e - the event to fire after each step of the simulation
Method Detail

addNode

public 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.

Specified by:
addNode in class Synchronizer
Parameters:
n - the simulator representing the node to add to this group

removeNode

public 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.

Specified by:
removeNode in class Synchronizer
Parameters:
n - the simulator thread to remove from this synchronization group

waitForNeighbors

public 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.

Specified by:
waitForNeighbors in class Synchronizer

start

public 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.

Specified by:
start in class Synchronizer

join

public 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.

Specified by:
join in class Synchronizer
Throws:
java.lang.InterruptedException

pause

public 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.

Specified by:
pause in class Synchronizer

stop

public 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.

Specified by:
stop in class Synchronizer

synch

public 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.

Specified by:
synch in class Synchronizer
Parameters:
globalTime - the global time in clock cycles to run all threads ahead to