首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthreads如何并行化作业

pthreads如何并行化作业
EN

Stack Overflow用户
提问于 2009-02-17 22:24:25
回答 3查看 1.6K关注 0票数 3

我需要并行化一个简单的密码破解程序,以便在n处理器系统上使用它。我的想法是创建n个线程,并在它们完成时为它们提供越来越多的作业。

知道线程何时结束的最好方法是什么?互斥体?当其他线程正在运行时,不断地检查这个互斥是不是很昂贵?

EN

回答 3

Stack Overflow用户

发布于 2009-02-17 22:28:17

你可以有一个简单的队列结构-使用任何你喜欢的数据结构-然后在你添加/删除项目时只使用一个互斥锁。

如果你的线程以足够大的“块”来获取它们需要做的工作,那么互斥上就会有很少的争用,所以开销也很小。

例如,如果每个线程一次占用大约1秒的工作时间,并且独立工作1秒,那么互斥锁上的操作将非常少。

当线程没有更多的工作时,它们可以退出;然后主线程可以使用pthread_join等待。

票数 5
EN

Stack Overflow用户

发布于 2009-02-17 22:44:32

在线程之间使用消息队列:

掌握->流程(说跟着这个走)。Process ->大师(说我完成了-给我更多,否则我已经找到结果了!)

使用这种方法,线程只有在系统关闭时才会关闭-否则它要么在处理数据,要么在等待消息队列。

这样,MCP (我一直想这么说!)简单地处理消息并将作业分配给等待更多工作的线程。

这可能比一直创建和销毁线程效率更高。

票数 1
EN

Stack Overflow用户

发布于 2009-02-21 02:42:56

通常情况下,对于这种需要等待异步作业完成的情况,您可以使用“条件变量”。

条件变量基本上是互斥保护的简单信号。Pthread有条件变量(例如pthread_cond_create(...) )函数)。

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

https://stackoverflow.com/questions/558995

复制
相关文章

相似问题

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