任何人都知道Barrier Synchronization
内部Semaphores
如何实施?我猜它正在使用{{1}},但我想知道它是如何工作的,有人知道吗?
我想一个想到这个的天真方式可能是为每个进程创建一个信号量数组。任何更好/更有效的实施?
答案 0 :(得分:2)
我会使用java.util.concurrent.CountDownLatch
或java.util.concurrent.CyclicBarrier
。
答案 1 :(得分:1)
好的,对不起这些家伙,毕竟我找到了它。在这里,万一有人感兴趣。
class Barrier(n:Int){
assert(n>1);
private var waiting = 0; // number of processes currently waiting
private val waitSem = new Semaphore; waitSem.down
private val mutex = new Semaphore;
def sync = {
mutex.down;
if(waiting==n-1){ waitSem.up; }
else{
waiting+=1; mutex.up; waitSem.down;
// Wait until woken
waiting-=1;
if(waiting==0) mutex.up; else waitSem.up;
}
}
}