【发布时间】:2011-10-31 00:02:25
【问题描述】:
我必须使用信号量在 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 中的信号量解决哲学家进餐问题?
感谢任何帮助。
【问题讨论】:
-
Wikipedia 列出了几种解决方案以及常见的陷阱。
-
是的,但这些解决方案与信号量无关。
-
我看到解决方案“导体”有一个信号量概念,但我不知道如何编码。
标签: java multithreading concurrency concurrent-programming