试图在Java中用餐哲学家实施服务员仲裁者解决方案

时间:2016-11-15 18:57:51

标签: java multithreading algorithm concurrency

我正准备接受编程采访,并认为我应该尝试为餐饮哲学家问题实施各种解决方案。

虽然我能够实施Dijkstra和Tannenbaum的解决方案,但我无法找到问题的服务员和仲裁者解决方案。

现在,我能想到的是应该有一个Waiter类和一个Arbitrator类(这是我实现的tryToEat()和isDoneEating()方法)而在Waiter类中我打算实现(permissionToEat) () 方法)。所有类都与Forks的单独类进行交互,我使用以下代码:

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;
}

}

如果我使用我想到的方法以及我缺少什么,那么实施服务员和仲裁者解决方案的伪代码应该是什么?

0 个答案:

没有答案