使用 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::deque
和 boost::condition_variable
唤醒线程并使用 boost::mutex
锁定双端队列。
您可能还想查看Boost.Asio。另见here。
【讨论】:
+1 推荐 Asio。您可能不想在生产代码中使用自己的线程池。如果必须,请查看 Williams 的“C++ Concurrency in Action”一书,该书有一整章关于该主题,讨论了许多您可能做错的事情。以上是关于使用 Boost::thread 类的线程池实现的主要内容,如果未能解决你的问题,请参考以下文章
C++ boost::asio::io_service创建线程池thread_group简单实例