CHAPTER 09
Intermediate
Deadlocks in Operating Systems
Updated: May 16, 2026
30 min read
# CHAPTER 9
Deadlocks in Operating Systems
1. Introduction
In the previous chapter, we learned that to prevent data corruption, threads must use Mutexes to lock resources. However, locking introduces a catastrophic new risk. Imagine a narrow, one-lane bridge. Car A enters from the North. Car B enters from the South. They meet perfectly in the middle. Car A cannot move forward because Car B is in the way. Car B cannot move forward because Car A is in the way. Neither car is willing to reverse. Traffic halts permanently. In Operating Systems, this permanent freeze is known as a Deadlock. In this chapter, we will dissect the anatomy of a Deadlock. We will identify the four strict conditions required for a deadlock to occur, analyze Resource Allocation Graphs, and explore the mathematical algorithms the OS uses to prevent, avoid, or recover from total system paralysis.2. Learning Objectives
By the end of this chapter, you will be able to:- Define a Deadlock and explain how poorly managed synchronization primitives cause it.
- Memorize and explain the 4 Coffman Conditions required for a deadlock.
- Interpret a Resource Allocation Graph (RAG) to visually identify circular wait loops.
- Distinguish between Deadlock Prevention and Deadlock Avoidance.
- Understand the mechanics of Banker's Algorithm and deadlock recovery techniques.
3. The Anatomy of a Deadlock
A Deadlock is a situation where a set of processes are permanently blocked because each process is holding a resource and waiting for another resource acquired by some other process.*The Code Example:*
- Thread 1 locks the Printer.
- Thread 2 locks the Scanner.
- Thread 1 needs the Scanner to continue, so it waits for Thread 2 to release it.
- Thread 2 needs the Printer to continue, so it waits for Thread 1 to release it.
4. The 4 Coffman Conditions
For a deadlock to mathematically exist in an operating system, four specific conditions must be true at the exact same time. If an OS can break even *one* of these conditions, a deadlock is impossible.- 1. Mutual Exclusion: The resource cannot be shared. (Only one thread can use the Printer at a time).
- 2. Hold and Wait: A process must be holding at least one locked resource while actively waiting in line for another.
- 3. No Preemption: The OS cannot aggressively steal a resource away from a process. The process must voluntarily release it.
- 4. Circular Wait: There must be a closed chain of processes. (P1 waits for P2, P2 waits for P3, P3 waits for P1).
5. Deadlock Prevention
Prevention means designing the OS rules so that one of the 4 Coffman conditions is physically impossible to achieve.- *Breaking "Hold and Wait":* Rule: A process must request ALL the resources it needs at the very beginning. If it can't get all of them, it gets none. (Inefficient, but perfectly safe).
- *Breaking "Circular Wait":* Rule: Number every resource (Printer=1, Scanner=2). A process must always request resources in numerical order. It can never request #1 if it already holds #2. This mathematically destroys the ability to form a circle.
6. Deadlock Avoidance (Banker's Algorithm)
Instead of enforcing strict rules, Avoidance acts like a loan officer at a bank. When a process asks for a lock, the OS pauses and runs a mathematical simulation (Dijkstra's Banker's Algorithm). The OS asks: *"If I give this process the lock right now, will it push the entire system into an 'Unsafe State' where a deadlock might happen in the future?"*- If the simulation says "Safe," the OS grants the lock.
- If the simulation says "Unsafe," the OS denies the lock and forces the process to wait.
7. Deadlock Detection and Recovery
What if you don't prevent or avoid deadlocks? What if you just let them happen? Many modern operating systems use the Ostrich Algorithm (sticking your head in the sand and ignoring the problem because it rarely happens and the math to prevent it is too slow). If a deadlock actually occurs, the OS must recover:- 1. Process Termination: The OS acts as a sniper. It forcefully kills one of the deadlocked processes, instantly breaking the Circular Wait.
- 2. Resource Preemption: The OS violently steals the lock away from a process and gives it to another, forcing the victim to roll back its execution.
8. Diagrams/Visual Suggestions
*Visual Concept: The Resource Allocation Graph (RAG)* Draw a directed graph.- Circles = Processes (P1, P2)
- Squares = Resources (Printer, Scanner)
- Arrow from Square to Circle = "Assignment Edge" (Printer is locked by P1).
- Arrow from Circle to Square = "Request Edge" (P1 is waiting for Scanner).
9. Best Practices
-
Timeout Mechanisms: When writing multithreaded code, never use a permanent "wait forever" command. Always use a timeout. Instead of
acquirelock(), useacquirelock(timeout=5_seconds). If the thread cannot get the lock in 5 seconds, it gives up, drops all its current locks, and tries again later. This single programming practice prevents 99% of real-world application deadlocks.
10. Common Mistakes
- Confusing Deadlock with Starvation: They are completely different.
- *Deadlock:* Two processes are frozen forever, staring at each other. Neither will ever execute.
- *Starvation:* A low-priority process waits in line for an hour because high-priority processes keep cutting in front of it. It isn't frozen; it's just being treated unfairly by the CPU scheduler.
11. Mini Project: Map a Deadlock Scenario
Read this database scenario and identify the Coffman condition forming the deadlock.- Database Query A locks Row 10, then attempts to read Row 20.
- Database Query B locks Row 20, then attempts to read Row 10.
12. Practice Exercises
- 1. List the 4 Coffman Conditions required for a deadlock.
- 2. Explain how enforcing a strict numerical ordering system for requesting resources completely eliminates the "Circular Wait" condition.
13. MCQs with Answers
Question 1
For a deadlock to exist within an operating system, four specific conditions must be met simultaneously. Which condition states that a resource currently locked by Process A cannot be violently stolen or revoked by the Operating System?
Question 2
Rather than strictly preventing deadlocks, an Operating System may utilize a complex mathematical simulation known as Banker's Algorithm every time a process requests a resource to ensure the system remains in a "Safe State." What is this strategy called?
14. Interview Questions
- Q: Name the four Coffman Conditions. If you are an OS architect and you successfully engineer your system to guarantee that "Hold and Wait" is mathematically impossible, do you still need to worry about the other three conditions causing a deadlock?
- Q: Explain the difference between Deadlock Prevention and Deadlock Avoidance. Why is Banker's Algorithm (Avoidance) rarely used in modern desktop operating systems like Windows or macOS? *(Hint: High overhead and unpredictability of processes).*
- Q: Contrast the concepts of Deadlock and Starvation. Can an Operating System successfully resolve a deadlock scenario by permanently starving a specific process?