等待任务在线程池中完成

时间:2010-12-31 16:47:35

标签: c++ windows threadpool

我在C ++中创建了一个线程池,它将所有任务存储在队列中。线程池启动n个线程,这些线程从队列中获取任务,处理每个任务,然后从队列中删除任务。

现在,我想等到所有任务完成。检查空队列以完成任务可能不起作用,可以为每个线程提供任务,队列可以清空,但任务仍然可以处理模式。

我不知道如何等待所有任务完成。这是一个设计问题。有什么建议吗?

2 个答案:

答案 0 :(得分:4)

你需要等待所有线程完成,还是只需要检查?

如果你只需要检查,你可以有一个变量来存储当前正在执行的任务的数量,InterlockedIncrement它在一个线程的开头,然后InterlockedDecrement在最后。< / p>

如果您需要等待,并且您拥有少量线程,则每个线程都可以拥有自己的手动重置事件,您在线程启动时ResetEvent,并在完成时SetEvent。然后只需WaitForMultipleObjects即可获得所有活动。

答案 1 :(得分:1)

使用sentinal任务告诉处理线程退出。将这些任务中的n个放在队列中。然后加入你的线程池。

你可以明显地修改它,这样你就可以做一些让游泳池保持活力的东西,而不是使用exit / join进行同步。例如,每个线程可以在某种条件变量或屏障上进行同步,或者在信号队列出任务时计算信号量。