我需要一个线程池来运行我的应用程序,并尽可能地依赖标准的东西(C++11或boost)。我知道有一个非官方的boost线程池类可以解决我的问题,但我宁愿避免使用它,因为它并不在boost库本身中 - 为什么这么多年后它仍然没有成为核心库的一部分呢?
在这个页面和其他地方的一些帖子中,人们建议使用boost :: asio来实现类似于线程池的行为。乍一看,这似乎是我想做的事情,但我发现我所见过的所有实现都没有办法加入当前活动任务,这使得它对我的应用程序毫无用处。为了执行连接操作,它们向所有线程发送停止信号,然后将它们加入。然而,这完全抵消了在线程池中使用的优势,因为这使得新任务需要创建一个新线程。
我想做的事情是:
在这个页面和其他地方的一些帖子中,人们建议使用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或核心Boost中是否有任何可以帮助我解决问题的东西?
boost::threadpool
是因为它是非官方的吗? - Paul Draper