
Necessary and Sufficient Deadlock Conditions

  - Coffman (1971) identified four (4) conditions that must hold simultaneously for 
there to be a deadlock.
  1. Mutual Exclusion Condition 
  - The resources involved are non-shareable.
 
  - Explanation:
At least one resource (thread) must be held in a non-shareable mode, that is, 
only one process at a time claims exclusive control of the resource. If another 
process requests that resource, the requesting process must be delayed until the 
resource has been released.
  2. Hold and Wait Condition 
  - Requesting process hold already, resources while waiting for requested 
  resources.
 
  - Explanation: There must exist a process that is holding a resource already allocated to it 
while waiting for additional resource that are currently being held by other 
processes.
  3. No-Preemptive Condition 
  - Resources already allocated to a process cannot be preempted.
 
  - Explanation:
Resources cannot be removed from the processes are used to completion or 
released voluntarily by the process holding it.
 
  -  
 
  - 4. Circular Wait Condition
 
  - The processes in the system form a circular list or chain where each process in 
the list is waiting for a resource held by the next process in the list.
 
  - 
  
 
  
  As an example, consider the traffic deadlock in the following figure

Consider each section of the street as a resource.
  - Mutual exclusion condition applies, since only one vehicle can be on a section of the 
street at a time.
 
  - Hold-and-wait condition applies, since each vehicle is occupying a section of 
the street, and waiting to move on to the next section of the street.
 
  - No-preemptive condition applies, since a section of the street that is a 
section of the street that is occupied by a vehicle cannot be taken away from 
it.
 
  - Circular wait condition applies, since each vehicle is waiting on the next 
vehicle to move. That is, each vehicle in the traffic is waiting for a section 
of street held by the next vehicle in the traffic.
 
The simple rule to avoid traffic deadlock is that a vehicle should only enter an 
intersection if it is assured that it will not have to stop inside the 
intersection.
It is not possible to have a deadlock involving only one single process. The 
deadlock involves a circular “hold-and-wait” condition between two or more 
processes, so “one” process cannot hold a resource, yet be waiting for another 
resource that it is holding. In addition, deadlock is not possible between two 
threads in a process, because it is the process that holds resources, not the 
thread that is, each thread has access to the resources held by the process.
 
 

