等待任务在线程池中完成

我用C ++创build了一个线程池,将所有任务存储在一个队列中。 线程池开始n个线程,从队列中取任务,处理每个任务,然后从队列中删除任务。

现在,我想等到所有的任务完成。 检查空队列以完成任务可能不起作用,任务可以被赋予每个线程并且队列可以被清空,但任务仍然可以处于处理模式。

我不知道如何等待所有的任务完成。这是一个devise问题。 有什么build议么?

Solutions Collecting From Web of "等待任务在线程池中完成"

你需要等待所有的线程完成,或者你只需​​要检查?

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

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

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

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