avrora.sim.types
Class SingleSimulation.SingleSynchronizer

java.lang.Object
  extended byavrora.sim.clock.Synchronizer
      extended byavrora.sim.types.SingleSimulation.SingleSynchronizer
Enclosing class:
SingleSimulation

protected static class SingleSimulation.SingleSynchronizer
extends Synchronizer


Field Summary
protected  Simulation.Node node
           
protected  SimulatorThread thread
           
 
Constructor Summary
protected SingleSimulation.SingleSynchronizer()
           
 
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

node

protected Simulation.Node node

thread

protected SimulatorThread thread
Constructor Detail

SingleSimulation.SingleSynchronizer

protected SingleSimulation.SingleSynchronizer()
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