Benutzer-Werkzeuge

Webseiten-Werkzeuge


parallelism:deadlocks:philosophenloesung: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:philosophenloesung:start [2025/04/08 10:55] Martin Pabstparallelism:deadlocks:philosophenloesung:start [2025/04/08 10:59] (aktuell) – [Lösung zu Teilaufgabe a)] Martin Pabst
Zeile 11: Zeile 11:
   * d) Ändern Sie das Programm so ab, dass eine andere der Coffman-Bedingungen nicht mehr zutrifft. Erläutern Sie Ihr Vorgehen.   * d) Ändern Sie das Programm so ab, dass eine andere der Coffman-Bedingungen nicht mehr zutrifft. Erläutern Sie Ihr Vorgehen.
 </WRAP> </WRAP>
 +
 +===== 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) ===== ===== Lösung zu Teilaufgabe c) =====
Zeile 55: Zeile 61:
    public void run() {    public void run() {
       while (true) {       while (true) {
-         forkLeft.take(color); +         if(forkLeft.getNumber() < forkRight.getNumber()) { 
-         sleep(10);  +            forkLeft.take(color); 
-         forkRight.take(color);+            sleep(10);  
 +            forkRight.take(color); 
 +         } else { 
 +            forkRight.take(color); 
 +            sleep(10);  
 +            forkLeft.take(color); 
 +         }
                    
          println("Philosopher eats", color);          println("Philosopher eats", color);
Zeile 77: Zeile 89:
    static final int gray = 0x808080;    static final int gray = 0x808080;
    int color = gray;    int color = gray;
 +   private int number;
  
    Fork(int number) {    Fork(int number) {
       super(500, 300, 580, 300);       super(500, 300, 580, 300);
 +      this.number = number;
       setBorderColor(color);       setBorderColor(color);
       rotate(360 / 10.0 + 360 / 5.0 * number, 400, 300);       rotate(360 / 10.0 + 360 / 5.0 * number, 400, 300);
Zeile 98: Zeile 112:
    }    }
  
 +   public int getNumber() {
 +      return number;
 +   }
 } }
 </script> </script>
parallelism/deadlocks/philosophenloesung/start.1744109700.txt.gz · Zuletzt geändert: 2025/04/08 10:55 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki