🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
thread库提供thread_group类用于管理一组线程,就像一个线程池,它内部使用std::list<thread*>来容纳thread对象,类摘要如下: ~~~ class thread_group::private noncopyable { public: template<typename F>; thread* create_thread(F threadfunc); void add_thread(thread* thrd); void remove_thread(thread* thrd); void join_all(); void interrupt_all(); int size() const; }; ~~~ 成员函数create_thread是一个工厂函数,可以创建thread对象并运行线程,同时加入到内部的list。我们也可以在thread_group对象外部创建线程,然后使用add_thread加入线程组。 如果不需要某个线程,可以使用remove_thread删除线程组里的thread对象。 join_all()、interrupt_all()用来对list里的所有线程对象进行操作,等待或中断这些线程。 ~~~ #include "stdafx.h" #include <iostream> #include <boost/thread.hpp> #include <boost/atomic.hpp> boost::mutex io_mu;//io流操作锁 void printing(boost::atomic_int &x,const std::string &str) { for(int i=0;i<5;++i) { boost::mutex::scoped_lock lock(io_mu);//锁定io流操作 std::cout<<str<<++x<<std::endl; } } int _tmain(int argc, _TCHAR* argv[]) { boost::atomic_int x(0); boost::thread_group tg; tg.create_thread(boost::bind(printing,ref(x),"hello")); tg.create_thread(boost::bind(printing,ref(x),"hi")); tg.create_thread(boost::bind(printing,ref(x),"boost")); tg.join_all(); getchar(); return 0; } ~~~