Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)
The canonical deadlock puzzle (Problem 15)
Five philosophers sit in a circle; one fork lies between each pair. To eat, a philosopher needs both adjacent forks. The naive solution — "pick up the left fork, then the right" — deadlocks: if all five grab their left fork at once, every right fork is held by a neighbour, and all five wait forever. It is the four Coffman conditions made physical (see Deadlock).
Three fixes (each breaks one Coffman condition)
- Resource ordering (breaks circular wait): number the forks; always pick up the lower-numbered first. Now one philosopher reaches for the same fork as a neighbour instead of completing the cycle.
- Asymmetry (the simplest): make one philosopher pick up the right fork first. That single reversal cannot close the ring.
- Arbiter / limit to 4 seated (breaks hold-and-wait): a semaphore with 4 permits ensures at least one philosopher can always get both forks.
// Resource-ordering fix (forks are locks 0..4)
Lock lo = forks[min(left,right)], hi = forks[max(left,right)];
lo.lock(); hi.lock();
try { eat(); } finally { hi.unlock(); lo.unlock(); } // always low-then-high
In Go
// limit-to-4 arbiter with a buffered channel as a counting semaphore
seats := make(chan struct{}, 4)
eat := func(l, r *sync.Mutex) {
seats <- struct{}{} // sit (max 4)
l.Lock(); r.Lock()
/* eat */
r.Unlock(); l.Unlock(); <-seats // leave
}
Takeaways
- Naive "left then right" = textbook circular-wait deadlock.
- Fix by breaking one Coffman condition: global fork ordering, one asymmetric philosopher, or cap concurrent diners.
- Same lesson as DB lock ordering — consistent acquisition order prevents cycles.
Re-authored for this guide; circular-wait diagram hand-authored as SVG. Covers Problem 15. See also: Deadlock, Livelock & Starvation; Semaphores.
🤖 Don't fully get this? Learn it with Claude
Stuck on Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.
Build the mental picture, not memorization.
I just read a lesson on **Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)** (Concurrency) and want to truly understand it. Explain Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15) from first principles using ONE vivid real-world analogy and a visual mental model — draw it as ASCII art or a clear step-by-step diagram — with a concrete example using real numbers. Then ask me one question to check I got the mental picture, and wait for my reply. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Socratic — adapts to where you're stuck.
Teach me **Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)** interactively. Ask me ONE guiding question at a time, wait for my answer, and adapt to my confusion — build the idea with me step by step instead of explaining it all at once. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Active recall exposes what you missed.
Quiz me on **Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)** with 5 questions, easy to tricky, ONE at a time. Tell me if each answer is right; at the end, explain clearly what I got wrong and why. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
Intuition + hook + flashcards for long-term memory.
Help me remember **Pattern: The Dining Philosophers — Deadlock-Free Coordination (Problem 15)** for the long term: give the one-sentence intuition, a memorable hook/mnemonic, a tiny worked example, and 3 active-recall flashcards (Q -> A). If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.