2

我有一堆并行任务要完成,但只有几个工作线程(比如 8 个,但我希望这是可配置的)。

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

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

我看到一些类似的讨论std::async,但我认为它给编译器的实现留下了太多东西。

4

2 回答 2

2

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

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

于 2013-07-31T05:13:15.437 回答
2

如果您的意思是线程池,没有 C++11 不提供线程池,您还必须决定是否要在 C++11 的线程模型中使用原子、互斥锁或栅栏,如果您正在寻找一些东西开箱即用的唯一真正解决方案 AFAIK 是英特尔 TBB 库。还有一个非官方的 boost 线程池库,但看起来并不流行或活跃。

于 2013-07-31T05:13:59.530 回答