【发布时间】:2013-07-31 11:28:13
【问题描述】:
我有一堆并行任务要完成,但只有几个工作线程(比如 8 个,但我希望这是可配置的)。
所以,8 个线程运行,每个线程从队列中弹出下一个任务,只要队列有任务。
C++11 是否提供任何内置结构来帮助实现这种设计?
我看到一些与std::async相关的类似讨论,但我认为它留给编译器的实现太多了。
【问题讨论】:
标签: c++ c++11 threadpool stdthread
我有一堆并行任务要完成,但只有几个工作线程(比如 8 个,但我希望这是可配置的)。
所以,8 个线程运行,每个线程从队列中弹出下一个任务,只要队列有任务。
C++11 是否提供任何内置结构来帮助实现这种设计?
我看到一些与std::async相关的类似讨论,但我认为它留给编译器的实现太多了。
【问题讨论】:
标签: c++ c++11 threadpool stdthread
如果您的意思是线程池,没有 C++11 不提供线程池,您还必须决定是否要在 C++11 的线程模型中使用原子、互斥锁或栅栏,如果您是寻找开箱即用的东西唯一真正的解决方案AFAIK是英特尔TBB库。还有一个非官方的 boost 线程池库,但看起来并不流行或活跃。
【讨论】:
如果需要,您可以拥有std::vector<std::thread>,但池和工作队列必须在 C++11 中自己实现。
如果你想要通用线程池实现,那么Boost.Asio 包含一个。您只需从多个线程io_service::run() 来设置线程池,然后可以使用io_service::post() 给出池的工作。如果您所做的工作与 I/O 无关,那么只有 io_service 这个名称会非常干净、简单和通用。
【讨论】: