parallele-programmierung/u06-3/Table.java

33 lines
651 B
Java

import java.util.concurrent.Semaphore;
class Table {
private int numForks;
private Semaphore[] forks;
public Table(int numForks) {
this.numForks = numForks;
this.forks = new Semaphore[numForks];
for (int i = 0; i < this.numForks; i++) {
this.forks[i] = new Semaphore(1);
}
}
public void takeForks(int i) throws InterruptedException {
int left = i;
int right = (i + 1) % numForks;
if (right > left) {
forks[left].acquire();
forks[right].acquire();
} else {
forks[right].acquire();
forks[left].acquire();
}
}
public void returnForks(int i) {
forks[i].release();
forks[(i + 1) % numForks].release();
}
}