5 Philosophen-Problem

OtuNa

Mitglied
Hallo!

ich habe heute die Aufgabe bekommen, das 5 Philosophen Problem zu lösen. Habe dies auch versucht, doch es hat nicht so richtig funktioniert.
Vielleicht kann mir jemand von euch weiterhelfen? 😛

Danke 🙂


Hier der Code:

Java:
public class Gabel {
   
    private boolean benutzt;
   
    public Gabel() {
        benutzt = false;
    }
   
    public synchronized boolean istBenutzt() {
        return benutzt;
    }
   
    public synchronized void nehmen() {
        if (benutzt) {
            benutzt = true;
        }
    }
   
    public synchronized void ablegen() {
        benutzt = false;
    }
}

Java:
public class Philosoph() extends Thread {
   
    private Gabel links;
    private Gabel rechts;
   
    private String person;
   
    public Philosoph(String person, Gabel links, Gabel rechts) {
        this.person = person;
        this.links = links;
        this. rechts = rechts;
       
        zufall = new Random;
    }
   
    public void essen() {
        synchronized(links) {
            fertig();
           
           
            synchronized(rechts) {
                System.out.println(person + " - nimmt links - ");
                links.nehmen();
                System.out.println(persom + " - nimmt rechts - ");
                rechts.nehmen();
                System.out.println(person + " - isst gerade - ");
                fertig();
                rechts.ablegen();
                links.ablegen();
            }
        }
       
        public void run() {
            while (true) {
                fertig();
                essen();
            }
        }
       
        public void fertig() {
            System.out.println(person + " isst nicht mehr");
            try {
                sleep(zufall.nextInt(1000));
            }
            catch (InterruptedException e) {
               
            }
        }
    }   
}

Java:
public class PP {
   
    Gabel eins = new Gabel();
    Gabel zwei = new Gabel();
    Gabel drei = new Gabel();
    Gabel vier = new Gabel();
    Gabel fuenf = new Gabel();
   
    Philosoph a = new Philosoph("Philosoph A", eins, zwei);
    Philosoph b = new Philosoph("Philosoph A", zwei, drei);
    Philosoph c = new Philosoph("Philosoph A", drei, vier);
    Philosoph d = new Philosoph("Philosoph A", vier, fuenf);
    Philosoph e = new Philosoph("Philosoph A", fuenf, eins);
   
    a.start();
    b.start()
    c.start();
    d.start();
    e.start();
}
 
Ich weiß es selber nicht so ganz... Manchmal hört es ganz am Anfang auf, manchmal läuft es sehr lang.
Wenn du magst kannst du es ja mal ausführen, dann siehst du es 😛
 
Meine Antwort hatte sich auf die Frage von Flown bezogen.
Wäre cool wenn ihr das Programm schnell selbst ausführt. Ist ein bisschen schwer zu erklären, wie ich finde...
 
Kennst du das Philosophenproblem? Es ist ja genau die Krux daran, dass es manchmal nicht terminiert und alle Philosophen verhungern.

Grüße
Kevin
 

Neue Themen


Zurück
Oben