我需要并行化一个简单的密码破解程序,以便在n处理器系统上使用它.我的想法是创建n个线程,并在完成后为它们提供越来越多的工作.
了解线程何时完成的最佳方法是什么?互斥?在其他线程运行时不断检查这个互斥锁是不是很昂贵?
您可以拥有一个简单的队列结构 - 使用您喜欢的任何数据结构 - 然后在添加/删除项目时使用互斥锁.
如果您的线程以足够大的"块"抓住他们需要完成的工作,那么互斥锁上的争用很少,因此开销非常小.
例如,如果每个线程一次抓取大约1秒的工作并独立工作1秒,那么互斥锁上的操作就会很少.
线程可以在没有更多工作时退出; 然后主线程可以使用pthread_join等待.