尝试用Java实现餐饮哲学家服务仲裁解决方案
我正在准备一次编程面试,我想我应该尝试一下如何解决这个问题 虽然我能够实现Dijkstra和Tannenbaum的解决方案,但我很难找到问题的服务员和仲裁员解决方案 现在,我所能想到的就是应该有一个water类和一个仲裁者类(这是我实现attemptoeat()和isDoneEating()方法的地方),而在我打算实现的water类中(permissionToEat()方法)。所有类都与Forks的单独类交互,我使用以下代码:尝试用Java实现餐饮哲学家服务仲裁解决方案,java,multithreading,algorithm,concurrency,Java,Multithreading,Algorithm,Concurrency,我正在准备一次编程面试,我想我应该尝试一下如何解决这个问题 虽然我能够实现Dijkstra和Tannenbaum的解决方案,但我很难找到问题的服务员和仲裁员解决方案 现在,我所能想到的就是应该有一个water类和一个仲裁者类(这是我实现attemptoeat()和isDoneEating()方法的地方),而在我打算实现的water类中(permissionToEat()方法)。所有类都与Forks的单独类交互,我使用以下代码: public class Fork { private fina
public class Fork {
private final Semaphore semaphore = new Semaphore(1);
private final int numberAroundTable;
private boolean usedFork = false;
public Fork(int numberAroundTable) {
this.numberAroundTable = numberAroundTable;
}
public int getNumberAroundTable() {
return numberAroundTable;
}
//'use' method to try pickup a fork and if successful change usedChopstick to true
public void use(){
try {
semaphore.acquire();
usedFork = true;
} catch (InterruptedException e) {
usedFork = false;
}
}
public void putDown(){
usedFork = false;
semaphore.release();
}
public boolean isUsed(){
return usedFork;
}
}
如果我使用我想到的方法,那么实现服务员和仲裁员解决方案的伪代码应该是什么?我遗漏了什么