A wait-for graph in computer science is a directed graph used for deadlock detection in operating systems and relational database systems.
In computer science, a system that allows concurrent operation of multiple processes and locking of resources and which does not provide mechanisms to avoid or prevent deadlock must support a mechanism to detect deadlocks and an algorithm for recovering from them.
One such deadlock detection algorithm makes use of a wait-for graph to track which other processes a process is currently blocking on. In a wait-for graph, processes are represented as nodes, and an edge from process
Pi
Pj
Pj
Pi
Pi
Pj
A wait-for graph is a graph of conflicts blocked by locks from being materialized; it can be also defined as the graph of non-materialized conflicts; conflicts not materialized are not reflected in the precedence graph and do not affect serializability.
The wait-for-graph scheme is not applicable to a resource allocation system with multiple instances of each resource type.
An arc from a transaction T1 to another transaction T2 represents that T1 waits for T2 to release a lock (i.e., T1 acquired a lock which is incompatible with a previously acquired lock from T2). A lock is incompatible with another if they are on the same object, one is a write, and they are from different transactions.
A deadlock occurs in a schedule if and only if there is at least one cycle in the wait-for graph. Not every cycle necessarily represents a distinct deadlock instance.