gpt4 book ai didi

java - 工作线程上的 CyclicBarrier

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:14 25 4
gpt4 key购买 nike

我有一个函数可以将数组分割成更小的部分。
然后在单独的线程中评估每个部分。
结果被填充到一个公共(public)列表中。

private void sortandkeep(int[] arr){
traversed.add(arr);
if(arr.length==1) return;
List<Integer> layer=new ArrayList<Integer>();
//Divide the layer into different parts for a barrier to be set up.
//After the barrier is broken,the layer is added to the main list
if(arr.length>4){
List<int[]> parts=split(arr);//smaller split pieces are populated on the list
CyclicBarrier barrier = new CyclicBarrier(parts.size());
for(int[] e:parts){
Thread t=new Thread(new sortingThread(barrier,e,layer));
t.start();
}
}
else
.........
//The main thread should not proceed,unless the above barrier is broken
sortandkeep(toIntArray(layer));
}

我本希望 sortandkeep 递归等待屏障被打破。
当所有工作线程都调用了await 时,就会发生这种情况。
然而事实并非如此。
主线程不断递归 - 无论工作线程的状态如何。怎么会这样?

最佳答案

如果主线程必须等待所有其他线程完成其任务,则该线程是必须通过屏障的各方之一,并且它也必须在继续之前调用 await

// [...]
CyclicBarrier barrier = new CyclicBarrier(parts.size() + 1); // sorting threads AND main thread
for(int[] e:parts){
Thread t=new Thread(new sortingThread(barrier,e,layer));
t.start();
}
} else
// [...]
//The main thread should not proceed, unless the above barrier is broken
barrier.await();
sortandkeep(toIntArray(layer));
// [...]

关于java - 工作线程上的 CyclicBarrier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com