c++11中的线程池和执行队列
Thread pool and execution queue in c++11
我有一堆并行任务要完成,但只有几个工作线程(比如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库。还有一个非官方的提升线程池库,但看起来并不流行或活跃。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- boost::进程间消息队列引发错误
- C++,系统无法执行指定的程序
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 使用C++中的模板和运算符重载执行矩阵运算
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- Android NDK传感器向事件队列报告奇怪的间隔
- 执行函数时导致崩溃的变量
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 无论条件是否为true,if总是在c++中执行
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 在C++中对T*类型执行std::move的意外行为
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如何在没有信号的情况下从C++执行QML插槽
- 无法对套接字执行操作,因为系统缺少足够的缓冲区空间或队列已满
- 执行Boost ASIO队列的最大尺寸
- 同时为队列中的对象执行函数时出现奇怪的行为
- c++11中的线程池和执行队列