セマフォを使ってJavaのダイニング哲学者の問題を解決する必要があります。セマフォーは、「手作業で」行われ、セマフォー・クラスを作成します。そして、次のようになります。どのようにセマフォを使用して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のセマフォーで食べる哲学者の問題を解決するのですか?
何か助けていただければ幸いです。
いくつかのソリューションだけでなく、上で概説commong落とし穴[ウィキペディア](http://en.wikipedia.org/wiki/Dining_philosophers_problem#Solutions)があります。 – Nico
はい、これらの解決策はセマフォーには関係ありません。 – Victor
ソリューション "導体"はセマフォの概念を持っていることがわかりましたが、どのようにコード化するのか分かりません。 – Victor