Benutzer-Werkzeuge

Webseiten-Werkzeuge


parallelism:deadlocks:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
parallelism:deadlocks:start [2025/03/20 15:43] – [Aufgabe 1: Das Philosophenproblem] Martin Pabstparallelism:deadlocks:start [2025/04/08 10:54] (aktuell) – [Aufgabe 1: Das Philosophenproblem] Martin Pabst
Zeile 48: Zeile 48:
 <WRAP center round todo 80%> <WRAP center round todo 80%>
   * a) Erläutern Sie, inwiefern die Coffman-Bedingungen erfüllt sind.   * 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?+  * 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.   * 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.
 </WRAP> </WRAP>
  
Zeile 80: Zeile 81:
        
    int color;    int color;
-   int number; 
-   Circle circle; 
    Fork forkLeft;    Fork forkLeft;
    Fork forkRight;    Fork forkRight;
  
    Philosopher(int number, int color, Fork forkLeft, Fork forkRight) {    Philosopher(int number, int color, Fork forkLeft, Fork forkRight) {
-      this.circle = new Circle(600, 300, 50);+      Circle circle = new Circle(600, 300, 50);
       circle.rotate(360 / 5.0 * number, 400, 300);       circle.rotate(360 / 5.0 * number, 400, 300);
       circle.setFillColor(color);        circle.setFillColor(color); 
-      this.number = number; 
       this.color = color;       this.color = color;
       this.forkLeft = forkLeft;       this.forkLeft = forkLeft;
Zeile 98: Zeile 96:
       while (true) {       while (true) {
          forkLeft.take(color);          forkLeft.take(color);
-         SystemTools.pause(10); +         sleep(10); 
          forkRight.take(color);          forkRight.take(color);
 +         
          println("Philosopher eats", color);          println("Philosopher eats", color);
-         SystemTools.pause(100);   // eat+         sleep(100);   // eat 
          forkRight.put();          forkRight.put();
          forkLeft.put();          forkLeft.put();
 +         
          println("Philosopher talks", color);          println("Philosopher talks", color);
-         SystemTools.pause(10);   // talk ;-)+         sleep(10);   // talk ;-)
       }       }
    }    }
Zeile 114: Zeile 115:
 class Fork extends Line { class Fork extends Line {
        
-   static int gray = 0x808080;+   static final int gray = 0x808080;
    int color = gray;    int color = gray;
-   int number; 
  
    Fork(int number) {    Fork(int number) {
-      super(500, 300, 650, 300);+      super(500, 300, 580, 300);
       setBorderColor(color);       setBorderColor(color);
       rotate(360 / 10.0 + 360 / 5.0 * number, 400, 300);       rotate(360 / 10.0 + 360 / 5.0 * number, 400, 300);
-      this.number = number; 
    }    }
  
Zeile 145: Zeile 144:
  
 </HTML> </HTML>
 +
 +[[.philosophenloesung:start|Lösung]]
parallelism/deadlocks/start.1742485392.txt.gz · Zuletzt geändert: 2025/03/20 15:43 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki