c ++ 11中的线程池和执行队列

时间:2013-07-31 04:55:38

标签: c++ c++11 threadpool stdthread

我有很多并行任务要完成,但只有少数工作线程(比如8,但我希望这是可配置的)。

因此,只要队列有任务,就会运行8个线程,并且每个线程都会从队列中弹出下一个任务。

C ++ 11是否提供任何内置构造来帮助实现此设计?

我看到一些与std::async相关的类似讨论,但我认为它对编译器的实现留下了太多的不足。

2 个答案:

答案 0 :(得分:2)

如果需要,您可以拥有std::vector<std::thread>,但您必须在C ++ 11中实现池和工作队列。

如果您想要通用线程池实现,那么Boost.Asio包含一个。您只需要从几个线程io_service::run()建立一个线程池,然后可以使用io_service::post()给出池的工作。相当干净,简单和通用只有名称io_service令人困惑,如果您所做的工作与I / O无关。

答案 1 :(得分:2)

如果你的意思是一个线程池,没有C ++ 11没有提供一个,你还必须决定是否要在你的线程模型中使用原子,互斥或围栏与C ++ 11,如果你是寻找能够开箱即用的东西唯一真正的解决方案AFAIK是英特尔TBB库。还有一个非官方的提升线程池库,但看起来不是很受欢迎或活跃。