我需要并行化一个简单的密码破解程序,以便在 n 处理器系统上使用它。我的想法是创建 n 个线程并在他们完成时为他们提供越来越多的工作。
知道线程何时完成的最佳方法是什么?互斥锁?在其他线程运行时不断检查这个互斥锁不是很昂贵吗?
最佳答案
您可以拥有一个简单的队列结构 - 使用您喜欢的任何数据结构 - 然后在添加/删除项目时只使用互斥锁。
如果您的线程在足够大的“块”中获取他们需要做的工作,那么互斥锁上的争用将非常少,因此开销很小。
例如,如果每个线程一次要抓取大约 1 秒的工作并独立工作 1 秒,那么对互斥锁的操作将非常少。
线程可以在没有更多工作时退出;然后主线程可以使用 pthread_join 等待。
关于multithreading - pthreads - 如何并行化作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/558995/