gpt4 book ai didi

java - 线程间通信的并行搜索

转载 作者:搜寻专家 更新时间:2023-11-01 02:59:32 25 4
gpt4 key购买 nike

假设我有一个 int 数组、一个元素 num 和 4 个线程。我给每个线程 1/4 的数组来搜索 num。(下面给出搜索方法)

public static boolean contains(int[] array, int minIdx, int maxIdx, int num) { ...}

在我的“顶层”,我可以安排 4 个线程来搜索数组的 4 个四分之一,但是我如何确保所有线程在其中一个找到元素后立即停止搜索(假设数组,因此该元素最多只能出现一次)。

P.S:你看,假设我的第 4 个线程在第一次迭代时找到了元素,我希望顶层方法立即返回,而不是等待其他 3 个线程完成。

最佳答案

您需要明确的信号。您可能会考虑内置的中断机制,也可能会推出自己的中断机制,因为它非常简单。

一个想法:在所有线程之间共享一个AtomicBoolean 并让每个线程定期检查它。当线程找到答案时,它会翻转 boolean 值。实现定期检查的最佳选择是嵌套循环:

for (int i = start; i < end && !done.get();) {
for (int batchLimit = Math.min(i + BATCH_SIZE, end); i < batchLimit; i++) {
// your logic
}
}

这是 JIT 编译器最容易优化的。

只要值没有变化,检查值的成本就非常低。它将在 L3 缓存中。值确实发生变化的情况无关紧要,因为到那时你就完成了。

关于java - 线程间通信的并行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39729240/

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