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

Posted

技术标签:

【中文标题】使用 Boost::thread 类的线程池实现【英文标题】:Thread pool Implementation using Boost::thread class 【发布时间】:2013-08-23 06:50:33 【问题描述】:

我想使用boost::thread 类实现线程池。

我可以使用下面的行创建线程。

boost::thread Consumer_1(consume); 

其中consumer_1 是线程,consume 是绑定到它的函数。

上面的语句一执行就启动线程。

现在我只想创建线程并执行绑定运行时间。

我还没有发现boost 方法来延迟这个绑定。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

绑定不能稍后完成。主要的原因——一个执行线程必须在执行某些东西。

您需要做的是创建一个函数,该函数将从队列中获取作业(表示为boost::function)并执行它们。比在一个或多个线程中运行此函数。

我不确定是否存在线程安全队列,但您始终可以使用常规的 std::dequeboost::condition_variable 唤醒线程并使用 boost::mutex 锁定双端队列。

您可能还想查看Boost.Asio。另见here。

【讨论】:

+1 推荐 Asio。您可能不想在生产代码中使用自己的线程池。如果必须,请查看 Williams 的“C++ Concurrency in Action”一书,该书有一整章关于该主题,讨论了许多您可能做错的事情。

以上是关于使用 Boost::thread 类的线程池实现的主要内容,如果未能解决你的问题,请参考以下文章

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

boost的线程池和内存池 智能指针

使用 asio 提升线程池:线程随机不执行

OpenMP、MPI、POSIX 线程、std::thread、boost::thread 如何关联?

C++ 从类的构造函数运行 boost 线程

类的非静态成员函数作为线程函数的注意事项