next up previous contents
Next: Resourcen Verteilungs-Graph Up: Deadlocks Previous: Deadlocks   Contents

Bedingungen für Deadlocks

Folgende vier Bedingungen müssen eintreten, damit ein Deadlock erreicht ist.

  1. Wechselseitiger Ausschluss: Jede Ressource ist entweder von genau einem Prozess in Gebrauch oder sie ist frei.
  2. Behalten und blockieren: Prozesse die schon Ressourcen haben können diese behalten und neue anfordern.
  3. Keine Wegnahme: Ressourcen können Prozessen nicht weggenommen werden.
  4. Zirkuläres Warten: Es muss eine Menge von Prozessen $\set{P_0
\ldo P_n}$ geben, bei den $P_0$ auf eine Resource wartet, die $P_1$ hat, $P_1$ auf eine Resource wartet, die $P_2$ hat, ... und $P_n$ auf eine Resource wartet die $P_0$ hat.

In obigem Beispiel sind diese vier Bedingungen erfüllt. Die Objekte m1 (first) sind von threadA und m2 (second) von threadB in Gebrauch. Es gibt keine weiteren Resourcen. Also ist die erste Bedingung erfüllt. Bedingung zwei wird durch die Möglichkeit innerhalb einer synchronized-Umgebung eine weitere synchronized-Umgebung zu deklarieren, erfüllt. In Java ist es nicht möglich, dass ein Objekt das von einem Thread gelockt wurde, von einem anderen Thread freigegeben wird. Damit ist Bedingung drei erfüllt. Die Erfüllung von Punkt vier ist bereits oben erläutert worden.


next up previous contents
Next: Resourcen Verteilungs-Graph Up: Deadlocks Previous: Deadlocks   Contents
Prof. Dr. Pluemicke 2003-05-10