A lightweight, concurrent detection mechanism avoids global thread
suspension by operating during runtime with threads under examination. A
particular configuration combines a dependency ("waits for") snapshot
with a progression check to determine advancement of purportedly
deadlocked threads. Thread blocking is enumerated in a table or graph
which denotes dependencies of threads and the corresponding resources.
For identified circular dependencies, a successive transition, or
progression check ratifies the potential deadlock. A transition counter
corresponding to each thread is analyzed in the progression check. The
transition counter is indicative of a change in state for the process in
question, hence is indicative of instruction execution, an activity not
performed by a blocked process. Deadlock is therefore ratified if the
transition counters associated with the threads in the potential deadlock
have not advanced.