gpt4 book ai didi

c++ - 当其中一个线程较早结束时终止所有线程 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:15:57 25 4
gpt4 key购买 nike

我正在寻找解决 C++ 问题的方法。

详细说明(简要说明如下):

我正在编写数独解算器。我已经创建了 bruteforce 方法(检查在同一行、列和正方形中已经使用了哪些数字),现在我想使用“启发式”多线程方法。这种启发式方法意味着当程序找到具有 >1 个可能值的单元格时,它会将第一个可能的值放入该单元格并尝试对其进行暴力破解。如果它通向正确 - 太好了!如果否,它会尝试此单元格的第二个可能值。依此类推,在可能值数组结束之前。然后它尝试对第二个空白单元格等执行相同的操作。在“多线程”下,我的意思是第一个线程将从第一个空白单元格开始运行该算法,第二个线程将从第二个空白单元格开始,依此类推。所以问题是:

简要说明:

我想创建n个线程,每个线程都有相同的概率找到正确的解决方案并将其返回给主线程(或者通过ref写入初始变量,即在主线程中等待它)。如果其中一个线程告诉我(我 == 主线程)它找到了解决方案,我正在寻找如何停止所有线程的方法。

附言如果您有任何改进我的算法的想法,我很乐意听取您的意见。

UPD 仅在 GNU/Linux 上运行

最佳答案

有两种通用方法可以解决这个问题。

一种方法是使用标志,并定期轮询标志。做到这一点的“安全”方法是使用原子,

std::atomic<bool> complete;

// In your thread, when you find a solution…
complete.store(true);

// In your thread, when you want to know if another thread found a solution…
if (complete.load()) {
// return early
}

第二种方法要困难得多,是当一名 worker 找到解决方案时实际杀死 worker 。唯一合理、安全的方法是在自己的进程中运行每个工作进程,并在找到解决方案时终止每个工作进程。

关于c++ - 当其中一个线程较早结束时终止所有线程 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030590/

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