parallelism:deadlocks:philosophenloesung:start
Inhaltsverzeichnis
Aufgabe 1: Das Philosophenproblem
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)
- a) Erläutern Sie, inwiefern die Coffman-Bedingungen erfüllt sind.
- b) Starten Sie das untenstehende Programm und untersuchen Sie, ob es zu einer Verklemmung kommt. Welche Rolle spielen die
sleep
-Anweisungen? - c) Ändern Sie das Programm so ab, dass die Bedingung "cyclic waiting" nicht mehr zutrifft und verifizieren Sie, dass damit die Verklemmung nicht mehr auftritt.
- d) Ändern Sie das Programm so ab, dass eine andere der Coffman-Bedingungen nicht mehr zutrifft. Erläutern Sie Ihr Vorgehen.
Lösung zu Teilaufgabe a)
- mutual exclusion (gegenseitiger Ausschluss) ist in diesem Fall erfüllt, weil eine Gabel zu einem gegebenen Zeitpunkt jeweils nur von einem Philosophen gehalten werden kann.
- hold and wait (Halten und Warten): ist
- 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.
Lösung zu Teilaufgabe c)
parallelism/deadlocks/philosophenloesung/start.txt · Zuletzt geändert: 2025/04/08 10:59 von Martin Pabst