public class SemaphoreWithQueues implements Semaphore {
private List<Object> queue;
private AtomicInteger current = new AtomicInteger(0);
private int permits;
public SemaphoreWith
ある計算では、とbの2つの配列 a[i]=f(i) for 0 ≤ i < n and b[i] = g(a[i]) for 0 ≤ i < nが生成されます。この計算がXとYの2つの並列プロセスに分解され、Xが配列aを計算し、Yが配列bを計算すると仮定します。このプロセスは、2つのバイナリセマフォーRとSを使用します。どちらも0に初期化されます。配列aは、2つのプロセスで共有されます。プロセスの
次のコードはWikiです。 wait(Semaphore s){
s=s-1;
if (s<0) {
// add process to queue
block();
}
}
signal(Semaphore s){
s=s+1;
if (s>=0) {
// remove process p from q