我必须使用信号量来编写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中的信号量解决食堂哲学家的问题?

任何帮助表示赞赏。

最佳答案

This(第64页)介绍了Tanenbaum的Modern Operating Systems 3e中的Dining Philosophers问题。使用C编程语言中的Sempahore解决了该问题。

关于java - 如何使用信号量以Java编写餐饮哲学家?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7948815/

10-09 23:32