使用 boost 创建线程池

Posted

技术标签:

【中文标题】使用 boost 创建线程池【英文标题】:Creating a thread pool using boost 【发布时间】:2011-05-04 08:12:51 【问题描述】:

是否可以使用boost的线程创建线程池? 我正在查看boost的库,但找不到线程池管理器(或类似的东西)...... 有什么办法吗?

tnx!

【问题讨论】:

另见:***.com/questions/19500404/… 我在这里发布了一个使用 boost::asio 的线程池示例。 [带有 boost::asio 的线程池示例][1] [1]:***.com/questions/31835009/… How to create a thread pool using boost in C++?的可能重复 【参考方案1】:

我知道一个答案已被接受,如果您现在需要这个,并且您不必费心编写自己的线程池,您可以尝试使用带有并发提示的 boost asio io_service(即它应该有多少线程run) 然后 post() 东西到这个 io_service...只是一个想法..

【讨论】:

使用 boost asio 是正确的方法。最好不要直接管理线程池。与英特尔线程构建模块 (TBB) 相同。 你能补充更多吗?听起来很有趣! 我发布了基于 Asio 食谱的线程池示例。 ***.com/questions/31835009/…【参考方案2】:

在 boost 中有一个非官方的(尚未)threadpool。 但是,自己实现一个不是问题,尤其是在通用性不是主要目标的情况下。想法:您的线程池可以使用 TaskType 类型和工作人员数量进行参数化。 TP 必须被赋予接受TaskType 的处理函数。 TP 包含一个添加任务的队列。真正的线程函数只是从队列中获取一个任务并调用传递的处理程序。类似的东西。

【讨论】:

我希望他们已经添加了线程池库。知道是否会很快添加它?非常感谢您的快速回答! 我不确定,但我猜测并希望 ThreadPool 和 Process 都在 1.45 中 线程池库看起来不错;太糟糕了,缺少文档(许多页面声明 TODO 并警告说明已过时)。看起来它自 2008 年以来就没有受到太多关注。

以上是关于使用 boost 创建线程池的主要内容,如果未能解决你的问题,请参考以下文章

使用 Boost::thread 类的线程池实现

使用boost asio的线程池

Boost:创建对象并使用线程填充向量

C++ boost::asio::io_service创建线程池thread_group简单实例

C++ boost::asio::io_service创建线程池thread_group简单实例

使用 boost::asio::thread_pool 的 C++ 线程池,为啥我不能重用我的线程?