我想知道如何用其他东西替换这个CyclicBarrier,比如数组中所有线程的通常join
。这是片段(为了清楚起见,省略了try-catch块等):
protected void execute(int nGens)
{
CyclicBarrier thread_barrier = new CyclicBarrier(n_threads+1);
ExecutorService thread_pool = Executors.newFixedThreadPool(n_threads);
for (int i=0; i<thread_array.length; i++) // all threads are in this array
threadPool.execute(thread_array[i]);
for (int i=0; i<total_generations; i++)
threadBarrier.await();
threadPool.shutdown();
while(!threadPool.isTerminated()){}
}
这是线程执行的代码
public void run()
{
for (int i=0; i<total_generations; i++)
{
next_generation(); // parallel computation (aka the 'task')
thread_barrier.await();
}
}
如您所见,所有线程都在启动时启动,然后多次执行某项任务。每次完成任务时,他们都会等到所有其他线程完成任务,然后再次执行。是否有任何较低级别的方法来实现这种同步?