Dies ist eine alte Version des Dokuments!
Deadlocks (Verklemmungen)
Die Zwillinge Klaus und Lena haben zusammen ein Rotorspielzeug geschenkt bekommen. Max schnappt sich sofort den Startgriff, Lena den Rotor. Natürlich hätte Lena jetzt gerne den Startgriff und Max den Rotor, aber beide geben ihr Teil nicht her.
Die verfahrene Situation lässt sich auf übersichtliche Weise in einem resource allocation graph (deutsch: Betriebsmittelzuteilungsgraph) veranschaulichen:
Es kommt hier zu einem Deadlock (deutsch: Verklemmung), bei dem keines der Kinder die angestrebte Tätigkeit ausführen kann, da ihm jeweils eine Ressource ("Betriebsmittel") fehlt.
Auch Threads benötigen oft Ressourcen (z.B. Schreibzugriff auf einen Speicherbereich, USB-Schnittstelle des Rechners, Drucker, Netzwerkschnittstelle) zu ihrer Ausführung. Sie beantragen den Zugriff darauf beim Betriebssystem und geben ihn später wieder zurück. Damit es zu einem Deadlock kommt, müssen die vier Coffman-Bedingungen erfüllt sein:
- mutual exclusion (gegenseitiger Ausschluss): Auf eine gegebene Ressource kann nur jeweils ein einziger Prozess Zugriff haben.
- hold and wait (Halten und Warten): Hält ein Thread eine Ressource, so kann er zugleich andere beantragen.
- non preemption (Ununterbrechbarkeit): Der Zugriff eines Threads auf eine Ressource kann nicht unterbrochen werden, d.h. dem Thread kann die Ressource nicht von außen entzogen werden (z.B. durch das Betriebssystem)
- cyclic waiting (zyklisches Warten): Im resource allocation graph gibt es mindestens einen Zyklus.