If a system does not employ either a deadlock prevention or deadlock avoidance algorithm then a deadlock situation may occur. In this case
 Apply an algorithm to examine state of system to determine whether deadlock has has occurred or not.
 Apply an algorithm to recover from the deadlock. For more refer Deadlock Recovery
Deadlock Detection Algorithm:
The algorithm employs several time varying data structures:
 Available A vector of length m indicates the number of available resources of each type.
 Allocation An n*m matrix defines the number of resources of each type currently allocated to a process. Column represents resource and resource represent process.
 Request An n*m matrix indicates the current request of each process. If request[i][j] equals k then process P_{i} is requesting k more instances of resource type R_{j}.
We treat rows in the matrices Allocation and Request as vectors, we refer them as Allocation_{i} and Request_{i}.
Steps of Algorithm:
 Let Work and Finish be vectors of length m and n respectively. Initialize Work= Available. For i=0, 1, …., n1, if Allocation_{i} = 0, then Finish[i] = true; otherwise, Finish[i]= false.
 Find an index i such that both
a) Finish[i] == false
b) Request_{i} <= Work
If no such i exists go to step 4.  Work= Work+ Allocation_{i}
Finish[i]= true
Go to Step 2.  If Finish[i]== false for some i, 0<=i<n, then the system is in a deadlocked state. Moreover, if Finish[i]==false the process P_{i} is deadlocked.
For example,

In this, Work = [0, 0, 0] &
Finish = [false, false, false, false, false]  i=0 is selected as both Finish[0] = false and [0, 0, 0]<=[0, 0, 0].
 Work =[0, 0, 0]+[0, 1, 0] =>[0, 1, 0] &
Finish = [true, false, false, false, false].  i=2 is selected as both Finish[2] = false and [0, 0, 0]<=[0, 1, 0].
 Work =[0, 1, 0]+[3, 0, 3] =>[3, 1, 3] &
Finish = [true, false, true, false, false].  i=1 is selected as both Finish[1] = false and [2, 0, 2]<=[3, 1, 3].
 Work =[3, 1, 3]+[2, 0, 0] =>[5, 1, 3] &
Finish = [true, true, true, false, false].  i=3 is selected as both Finish[3] = false and [1, 0, 0]<=[5, 1, 3].
 Work =[5, 1, 3]+[2, 1, 1] =>[7, 2, 4] &
Finish = [true, true, true, true, false].  i=4 is selected as both Finish[4] = false and [0, 0, 2]<=[7, 2, 4].
 Work =[7, 2, 4]+[0, 0, 2] =>[7, 2, 6] &
Finish = [true, true, true, true, true].  Since Finish is a vector of all true it means there is no deadlock in this example.
Recommended Posts:
 Operating System  Deadlock detection in Distributed systems
 Program for Deadlock free condition in Operating System
 Operating System  Process Management  Deadlock Introduction
 Deadlock Detection And Recovery
 Techniques used in centralized approach of deadlock detection in distributed systems
 Operating System  Bakery Algorithm
 Operating System  Banker's Algorithm
 Operating System  Dekker's algorithm
 Operating System  Program for Next Fit algorithm in Memory Management
 Operating System  Peterson's Algorithm (Using processes and shared memory)
 Operating System  Banker's Algorithm : Print all the safe state (or safe sequences)
 Operating System  Buddy System  Memory allocation technique
 Operating System  Starvation and Aging in Operating Systems
 Operating System  Semaphores in operating system
 Operating System  Introduction of Operating System  Set 1
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.
Improved By : EduardoNodarse