- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在寻找解决 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/
我想在 tomcat 加载 servlet 并准备好服务时在启动时收到通知。我想在此通知中对此 servlet 进行 http 调用。 我已经尝试将 ServletContextListener 添加
我是一名优秀的程序员,十分优秀!