Ein Deadlock (deutsch Verklemmung) ist die dauerhafte Blockierung von (mindestens 2) Prozessen, die die gemeinsame Ressource nutzen.

Ein Deadlock tritt auf, wenn mindestens zwei Prozesse sich in einem wechselseitigen Wartezustand befinden und dieser Zustand auch durch die Freigabe aller Ressourcen anderer Prozesse nicht aufgegeben werden kann. Einen Deadlock mit nur 2 beteiligten Prozessen nennt man auch Deadly Embrace (tödliche Umarmung).

Deadly Embrace|200

Bedingungen

Folgende vier Bedingungen sind notwendig und hinreichend für Deadlocks (Coffman, Elphick & Shoshani, 1971). Das heißt, treffen alle Bedingungen zu, kommt es zwangsläufig zum Deadlock. Trifft mindestens eine Bedingung nicht zu, wird der Deadlock vermieden.

  1. Serielle Benutzung von Ressourcen (mutual exclusion), z.B. synchronized-Methoden in Java
  2. Inkrementelles Ressourcen-Erlangen - Während des Wartens auf eine Ressource gibt ein Prozess bereits erlangte Ressourcen nicht frei
  3. Keine Preemption - Einem Prozess kann eine bereits erlangte Ressource nicht genommen werden
  4. Wartezyklus - Eine Prozesskette existiert, innerhalb der jeder Prozess die Ressource hält, auf die sein Vorgänger wartet

Vermeidung

  • Detection & Recovery - Terminieren einzelner Prozesse in der Abhängigkeitskette durch Präemptiv
  • Vorbeugen - Programme so designen, dass es nicht zum Deadlock kommen kann