我的应用程序需要一个线程池,并且我想尽可能地依赖标准(C++11 或 boost)的东西。我意识到有一个非官方的(!)boost线程池类,它基本上解决了我需要的东西,但是我宁愿避免它,因为它不在boost库本身 - 为什么它仍然不在核心库中很多年?
在此页面和其他地方的一些帖子中,人们建议使用 boost::asio 来实现类似线程池的行为。乍一看,这看起来像是我想做的,但是我发现我所看到的所有实现都无法加入当前活动的任务,这使得它对我的应用程序毫无用处。为了执行加入,它们向所有线程发送停止信号,然后加入它们。但是,这完全抵消了线程池在我的用例中的优势,因为这使得新任务需要创建新线程。
我想做的是:
ThreadPool pool(4);
for (...)
{
for (int i=0;i<something;i++)
pool.pushTask(...);
pool.join();
// do something with the results
}
任何人都可以提出解决方案(除了使用 sourceforge 上现有的非官方线程池)?C ++ 11或核心提升中有什么可以帮助我吗?