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. Zu einem Deadlock kommt es dann und nur dann, wenn die vier Coffman-Bedingungen erfüllt sind:
Hier noch ein Beispiel für einen resource allocation graph mit deadlock:
Aufgabe 1:
Da Deadlocks nur dann auftreten können, wenn alle vier Coffman-Bedingungen erfüllt sind, reicht es, eine davon außer Kraft zu setzen, um Deadlocks sicher zu verhindern. Hier ein paar mögliche Strategien dazu:
Aufgabe 2: Bearbeiten Sie Teilaufgabe III 2. im Abitur 2016.
Das Philosophenproblem wurde vom Informatiker Edsger W. Dijkstra formuliert um die Problematik der Nebenläufigkeit/Verklemmung zu illustrieren.
"Fünf Philosophen, nummeriert von eins bis fünf, leben in einem Haus, in dem der Tisch für sie gedeckt ist, wobei jeder Philosoph seinen eigenen Platz am Tisch hat. Ihr einziges Problem – neben dem der Philosophie – ist, dass es sich bei dem servierten Gericht um eine sehr schwierige Sorte Spaghetti handelt, die mit zwei Gabeln gegessen werden muss. Zwischen den Tellern befindet sich jeweils eine Gabel, sodass dies für einen einzelnen Philosophen kein Problem darstellt. Allerdings können zwei Nachbarn nicht gleichzeitig essen." (Quelle: Wikipedia-Artikel)
sleep
-Anweisungen?