3 SynchronisationPhilosophenproblem

Philosophenproblem

Auf einen Blick

Fünf Philosophen sitzen um einen Tisch, zwischen je zweien liegt eine Gabel. Zum Essen braucht jeder beide Nachbargabeln. Der naive Algorithmus führt direkt in einen Deadlock — das klassische Lehrbeispiel für Synchronisation.

Das Szenario

while (true) {
    denken();
    nimm(linkeGabel);
    geistesBlitz();
    nimm(rechteGabel);
    essen();
    legeGabelnZurück();
}

Nehmen alle gleichzeitig zuerst die linke Gabel, hält jeder eine und wartet ewig auf die rechte → Circular Wait, alle vier Deadlock-Bedingungen erfüllt.

Interaktiv: Deadlock & Lösung

Wechsle zwischen dem naiven Ablauf (Deadlock) und der Lösung:

philosophen.html

Lösungsansätze

Jeder Ansatz bricht gezielt eine Deadlock-Bedingung:

  • Ressourcen-Ordnung (Bedingung Circular Wait): Gabeln global nummerieren, immer zuerst die kleinere nehmen. Der Zyklus kann sich nicht schließen. (im interaktiven Element gezeigt)
  • Asymmetrie: Ein Philosoph nimmt erst rechts, dann links.
  • Kellner / zählende Semaphore (Bedingung Hold and Wait): höchstens 4 Philosophen dürfen gleichzeitig nach Gabeln greifen.
  • Beide Gabeln atomar anfordern (alles-oder-nichts).
Warum das wichtig ist

Das Problem modelliert reale Situationen, in denen Prozesse mehrere Semaphoren/Sperren gleichzeitig brauchen — etwa Datenbank-Transaktionen, die mehrere Tabellen sperren.

Verwandte Notes

Deadlocks · Semaphoren · Kritischer Abschnitt & Mutual Exclusion

← Kapitelübersicht


⬅️ Deadlocks

Built with LogoFlowershow