pthreads - 如何并行化作业

时间:2009-02-17 22:24:25

标签: multithreading pthreads parallel-processing

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

知道线程何时完成的最佳方法是什么?互斥?在其他线程运行时,不断检查这个互斥锁是不是很贵?

3 个答案:

答案 0 :(得分:5)

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

如果您的线程以足够大的“块”获取他们需要完成的工作,那么互斥锁上的争用很少,因此开销非常小。

例如,如果每个线程一次抓取大约1秒的工作并独立工作1秒,那么互斥锁上的操作就会很少。

线程可以在没有更多工作时退出;然后主线程可以使用pthread_join等待。

答案 1 :(得分:1)

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

大师 - >过程(说到这个)。 过程 - >师父(说我已经完成了 - 给我更多,或者,我已经找到了结果!)

使用它,线程只在系统执行时关闭 - 否则它处理数据或等待消息队列。

这样,MCP(我一直想说!)只是处理消息并将作业交给等待更多工作的线程。

这可能会更有效地创建和销毁线程。

答案 2 :(得分:1)

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

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