当其中一个结束较早的C 时,杀死所有线程
Kill all threads when one of them has ended earlier C++
我正在寻找如何解决我的问题的方法。
详细说明(简短描述如下):
我正在写Sudoku求解器。我已经创建了Bruteforce方法(检查同一行,列和Square已经使用了哪些数字),现在我想使用"启发"多线程方法。这种启发式方法意味着,当程序找到具有> 1个可能值的单元时,它将为该单元格提供首先可能的值,并在其上尝试bruteforce。如果它导致正确 - 太好了!如果否,它将为该单元格尝试第二可能的值。依此类推,在可能值的数组结束之前。然后,它试图使用第二个空白单元格等执行相同的操作。在"多线程"下,我的意思是,第一个线程将从第一个空白单元格开始运行该算法,第二个线程将从第二个空白单元格开始,依此类推。所以问题是:
简要说明:
我想创建 n 线程,它们每个线程都有相同的概率来找到正确的解决方案并将其返回到主线程(或通过参考将其写入初始变量,这就是在主线程中等待它)。如果其中一个告诉我(me ==主线程),我正在寻找如何停止所有线程的方法。
P.S。如果您有任何想法改善我的算法,我很高兴收到您的来信。
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
}
第二种方法要困难得多,是在一个工人找到解决方案时实际杀死工人。唯一合理的安全方法是在找到解决方案时在自己的过程中运行每个工人并杀死每个工艺。
相关文章:
- 结束另一个线程中使用的对象的生存期
- 使用 shared_ptr 在中断时结束多线程循环
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- 线程池如何结束程序
- 为什么我的线程永远不会结束
- 当进程结束时,处于Sleep()中间的线程会发生什么
- Linux C++程序以一个仍在运行的线程结束后该怎么办
- 线程未正确结束:它忽略失败的循环条件
- 哪个线程以多线程结束
- C++结束从主线程分离的线程
- 函数执行结束时,向量中的线程会发生什么情况
- 如何在给定的openmp线程结束时退出程序
- 等待线程结束(c++)
- 等待线程/s直到另一个线程/s结束
- QThread::quit()是立即结束线程还是等到返回事件循环
- 线程意外结束.c++
- c++在另一个线程中观察main()的结束
- 分离线程执行结束
- 如果由于接收对象的线程已结束而未处理Qt信号,参数会被删除吗?
- 使用async结束线程并超出其未来的范围是否安全?