首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型解决方案空间的多线程搜索

大型解决方案空间的多线程搜索
EN

Stack Overflow用户
提问于 2013-07-05 21:47:00
回答 1查看 158关注 0票数 4

我必须搜索一个大的解决方案空间(枚举所有特定顺序的拉丁方)来寻找有效的解决方案。我正在尝试多线程(boost::thread)。我将解决方案空间划分为子空间,并在单个线程中研究特定的子空间。这很好用,因为线程之间没有依赖关系。

但现在我想将所有有效的解决方案保存在一个列表中。最好是使用单个列表(共享数据)并用互斥锁包围它,还是应该为每个线程创建列表(本地数据),并在线程完成后连接这些列表?

对于更高的订单,可能有数百万种有效的解决方案。因此,这个过程要么涉及到大量的互斥锁/解锁,要么涉及到每个线程占用大量内存。

谢谢,丹尼尔·德克斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-05 22:07:37

根据您的解释,您需要在算法结束时连接本地列表。如果每个线程都要找到许多解决方案,那么在互斥锁中使用会大大降低你的计算速度。根据我对你的理解,你现在应该认为内存相当便宜,但如果不知道解决方案的大小,就很难确定。

也可以有在存储空间中最小的列表合并算法(即,通过一次复制少量数据),这可以解决小存储器占用问题。

话虽如此,对于您的问题也有混合解决方案。例如,您可以创建一个共享容器并对其进行分区,以便将分区分配给每个线程,可以是交错的,也可以是块的。这将允许您删除每次访问的互斥锁,但将需要容器增长的复杂机制(因为似乎不可能预先知道您将有多少解决方案)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17490417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档