class DiningPhilosopher implements Resource {
int n = 0;
BinarySemaphore[] fork = null;
public DiningPhilosopher(int initN) {
n = initN;
fork = new BinarySemaphore[n];
for (int i = 0; i < n; i++) {
fork[i] = new BinarySemaphore(true);
}
}
public void acquire(int i) {
fork[i].P();
fork[(i + 1) % n].P();
}
public void release(int i) {
fork[i].V();
fork[(i + 1) % n].V();
}
public static void main(String[] args) {
DiningPhilosopher dp = new DiningPhilosopher(5);
for (int i = 0; i < 5; i++)
new Philosopher(i, dp);
}
}