当其中一个线程较早结束时终止所有线程 C++
Kill all threads when one of them has ended earlier C++
我正在寻找解决 C++ 问题的方法。
详细说明(以下为简要说明):
我正在编写数独解算器。我已经创建了 bruteforce 方法(检查在同一行、列和正方形中已经使用了哪些数字),现在我想编写 "heuristic" 多线程方法。这种启发式方法意味着当程序找到具有 >1 个可能值的单元格时,它会将第一个可能的值放入该单元格并尝试对其进行暴力破解。如果它通向正确 - 太好了!如果否,它会尝试此单元格的第二个可能值。依此类推,在可能值数组结束之前。然后它尝试对第二个空白单元格等做同样的事情。在'multithread'下我的意思是第一个线程将从第一个空白单元格开始运行这个算法,第二个线程将从第二个空白单元格开始等等。所以问题是:
简要说明:
我想创建 n 个线程,每个线程都有相同的概率找到正确的解决方案并 return 它返回主线程(或写它通过引用初始变量,它在主线程中等待它)。如果其中一个线程告诉我(我 == 主线程)它找到了解决方案,我正在寻找如何停止所有线程的方法。
P.S. 如果您有任何关于如何改进我的算法的想法,我很乐意听取您的意见。
UPD 运行 仅在 GNU/Linux
有两种通用方法可以解决此问题。
一种方法是使用标志,并定期轮询标志。 "safe" 方法是使用原子,
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
}
第二种方法要困难得多,是当一个工人找到解决方案时,实际上杀死工人。唯一合理安全的方法是 运行 每个工作进程都在自己的进程中,并在找到解决方案时杀死每个工作进程。
我正在寻找解决 C++ 问题的方法。
详细说明(以下为简要说明):
我正在编写数独解算器。我已经创建了 bruteforce 方法(检查在同一行、列和正方形中已经使用了哪些数字),现在我想编写 "heuristic" 多线程方法。这种启发式方法意味着当程序找到具有 >1 个可能值的单元格时,它会将第一个可能的值放入该单元格并尝试对其进行暴力破解。如果它通向正确 - 太好了!如果否,它会尝试此单元格的第二个可能值。依此类推,在可能值数组结束之前。然后它尝试对第二个空白单元格等做同样的事情。在'multithread'下我的意思是第一个线程将从第一个空白单元格开始运行这个算法,第二个线程将从第二个空白单元格开始等等。所以问题是:
简要说明:
我想创建 n 个线程,每个线程都有相同的概率找到正确的解决方案并 return 它返回主线程(或写它通过引用初始变量,它在主线程中等待它)。如果其中一个线程告诉我(我 == 主线程)它找到了解决方案,我正在寻找如何停止所有线程的方法。
P.S. 如果您有任何关于如何改进我的算法的想法,我很乐意听取您的意见。
UPD 运行 仅在 GNU/Linux
有两种通用方法可以解决此问题。
一种方法是使用标志,并定期轮询标志。 "safe" 方法是使用原子,
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
}
第二种方法要困难得多,是当一个工人找到解决方案时,实际上杀死工人。唯一合理安全的方法是 运行 每个工作进程都在自己的进程中,并在找到解决方案时杀死每个工作进程。