Guten Tag,
habe leider ein kleines Problem mit Signal/SignalAll.
Folgender Sachverhalt. Es gibt 5 Personen (in diesem Fall Philosophen), diese sitzen an einen Tisch. Während einer isst, dürfen sein Kollegen nicht essen und diese denken demnach. Sobald einer fertig gegessen hat, denkt dieser und signalisiert es seinen Kollegen(die die denken).
Vorgegeben war ein Table (ist vom Typ Lock).
Meine Denkweise war jetzt, eine Condition zu erstellen, welche sobald einer der Kollegen nebenan isst, wartet und sobald diese fertig sind benachrichtigt wird. Es kommen aber immer eine Fehlermeldung und meist(so gut wie immer) essen die beiden gleichen Philosophen.
private Philosopher right;
private Philosopher left;
static private Lock table;
private volatile boolean essen = false;
private int sitzplatz;
private String name= "";
volatile static int zaehler;
Condition stopper;
boolean aufhören = true;
Philosopher(){
name = name +zaehler++;
}
public void run () {
while(aufhören==true) {
try {
aktion(); //entweder denken oder essen
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
void aktion() throws InterruptedException {
this.table.lock();
try {
while(this.right.isEssen()== true || this.left.isEssen() == true) {
System.out.println("Ich denke: " + this.name);
this.essen = false;
this.stopper.await(); //hier würde der Thread warten, wenn einer von beiden isst
}
}
finally {
this.essen = true;
System.out.println("YumYum "+ this.name); //er isst
right.stopper.signalAll();
left.stopper.signalAll();
this.table.unlock();
}
}
habe leider ein kleines Problem mit Signal/SignalAll.
Folgender Sachverhalt. Es gibt 5 Personen (in diesem Fall Philosophen), diese sitzen an einen Tisch. Während einer isst, dürfen sein Kollegen nicht essen und diese denken demnach. Sobald einer fertig gegessen hat, denkt dieser und signalisiert es seinen Kollegen(die die denken).
Vorgegeben war ein Table (ist vom Typ Lock).
Meine Denkweise war jetzt, eine Condition zu erstellen, welche sobald einer der Kollegen nebenan isst, wartet und sobald diese fertig sind benachrichtigt wird. Es kommen aber immer eine Fehlermeldung und meist(so gut wie immer) essen die beiden gleichen Philosophen.
private Philosopher right;
private Philosopher left;
static private Lock ta
private volatile boolean essen = false;
private int sitzplatz;
private String name= "";
volatile static int zaehler;
Condition stopper;
boolean aufhören = true;
Philosopher(){
name = name +zaehler++;
}
public void run () {
while(aufhören==true) {
try {
aktion(); //entweder denken oder essen
} catch (InterruptedException e1) {
e1.printStackTrace();
}
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
void aktion() throws InterruptedException {
this.table.lock();
try {
while(this.right.isEssen()== true || this.left.isEssen() == true) {
System.out.println("Ich denke: " + this.name);
this.essen = false;
this.stopper.await(); //hier würde der Thread warten, wenn einer von beiden isst
}
}
finally {
this.essen = true;
System.out.println("YumYum "+ this.name); //er isst
right.stopper.signalAll();
left.stopper.signalAll();
this.table.unlock();
}
}