uk.ac.man.cs.rainbow.deadlock
Class PODeadlockChecker

java.lang.Object
  |
  +--uk.ac.man.cs.rainbow.deadlock.DeadlockChecker
        |
        +--uk.ac.man.cs.rainbow.deadlock.PODeadlockChecker

public class PODeadlockChecker
extends DeadlockChecker

Check a scheduling system for deadlock. Uses agressive partial ordering to reduce the state space searched by only searching all the alternatives at non-deterministic points.

See Also:
StateEngine, StateEnumerator, StateEnumerator.isNondeterministic()

Inner classes inherited from class uk.ac.man.cs.rainbow.deadlock.DeadlockChecker
DeadlockChecker.ExplorationObserver
 
Fields inherited from class uk.ac.man.cs.rainbow.deadlock.DeadlockChecker
DEADLOCK, FINISHED, WORKING
 
Constructor Summary
PODeadlockChecker(StateEnumerator enum)
          Create a new deadlock-checker.
 
Method Summary
 int step()
          Perform a single deadlock step.
 
Methods inherited from class uk.ac.man.cs.rainbow.deadlock.DeadlockChecker
addExplorationObserver, canDeadlock, canDeadlock, getStateEngine, notifyObservers, removeExplorationObserver, step
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PODeadlockChecker

public PODeadlockChecker(StateEnumerator enum)
                  throws RainbowException
Create a new deadlock-checker.
Parameters:
enumerator - The simulation that is to be deadlock-checked.
Throws:
RainbowException - If something goes wrong during initialisation of the scheduler.
Method Detail

step

public int step()
         throws RainbowException
Perform a single deadlock step. Note that when the system decides to backtrack, it backtracks until it runs out of states to backtrack into or it reaches a nondeterministic state.
Overrides:
step in class DeadlockChecker
Returns:
Whether the system has searched the whole state space, found a deadlock or still has more work to do.
Throws:
RainbowException - If something goes wrong during a step.
See Also:
DeadlockChecker.DEADLOCK, DeadlockChecker.FINISHED, DeadlockChecker.WORKING, StateEnumerator.isNondeterministic()