Мне нужно закодировать решение проблемы столовых философов в Java с использованием семафоров. Семафор делается «вручную», создавая семафорный класс. И выглядит так:
package principal;
public class Semaforo {
private int valor;
private int esperando;
public Semaforo(int valor) {
this.valor=valor;
this.esperando=0;
}
public synchronized void down() {
if (this.valor >0 ){
this.valor--;
} else {
this.esperando++;
try {
wait();
} catch (Exception e) {
}
}
}
public int getValor() {
return valor;
}
public synchronized void up() {
if (this.valor > 0) {
this.valor++;
} else {
if (this.esperando >0 ) {
notify();
this.esperando--;
} else {
this.valor++;
}
}
}
}
Было бы неплохо, если бы у меня было решение, позволяющее избежать проблем параллелизма, таких как тупики, голодание, блокировки и т. Д. Я думал о том, чтобы каждый философ ел в свое время, но я не знаю, как я мог бы сделать это с семафорами. Как мне решить проблему философов-столовых с семафорами в Java?
Любая помощь приветствуется.