Knowledge Guide
HomeConcurrencyConcurrency Problems

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).

Five philosophers in a circle each holding their left fork and waiting on the right, forming a circular-wait deadlock
Five philosophers in a circle each holding their left fork and waiting on the right, forming a circular-wait deadlock

Three fixes (each breaks one Coffman condition)

// 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


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.

🎨 Explain it visually

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.
🤔 Walk me through it (interactive)

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.
🧪 Quiz me & fix my gaps

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.
🧠 Make it stick

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.

📝 My notes