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

Thread pool and execution queue in c++11

本文关键字:执行 队列 线程 c++11      更新时间:2023-10-16

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

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

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

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

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

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

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