Expert Dot Net

Trust me to find new way !

What is a Deadlock?

Deadlock is a situation where a set of processes are blocked because each process is holding a resource and waiting for another resource acquired by some other process.


Consider an example when two trains are coming toward each other on same track and there is only one track, none of the trains can move once they are in front of each other. Similar situation occurs in operating systems when there are two or more processes hold some resources and wait for resources held by other(s). For example, in the below diagram, Process 1 is holding Resource 1 and waiting for resource 2 which is acquired by process 2, and process 2 is waiting for resource 1.



How to avoid Deadlocks

Deadlocks can be avoided by avoiding at least one of the four conditions, because all this four conditions are required simultaneously to cause deadlock.

  1. Mutual Exclusion

    Resources shared such as read-only files do not lead to deadlocks but resources, such as printers and tape drives, requires exclusive access by a single process.

  2. Hold and Wait

    In this condition processes must be prevented from holding one or more resources while simultaneously waiting for one or more others.

  3. No Preemption

    Preemption of process resource allocations can avoid the condition of deadlocks, where ever possible.

  4. Circular Wait

    Circular wait can be avoided if we number all resources, and require that processes request resources only in strictly increasing(or decreasing) order.


Handling Deadlock

The above points focus on preventing deadlocks. But what to do once a deadlock has occurred. Following three strategies can be used to remove deadlock after its occurrence.

  1. Preemption

    We can take a resource from one process and give it to other. This will resolve the deadlock situation, but sometimes it does causes problems.

  2. Rollback

    In situations where deadlock is a real possibility, the system can periodically make a record of the state of each process and when deadlock occurs, roll everything back to the last checkpoint, and restart, but allocating resources differently so that deadlock does not occur.

  3. Kill one or more processes

    This is the simplest way, but it works.

blog comments powered by Disqus