多线程编程:
1:thread_group是线程组的意思,可以实现对多个线程统一管理
2:成员函数如下:
thread *create_thread(const boost::function0 <void>& ); // 创建一个线程
void add_thread(thread* ); // 加入一个已存在的线程
void remove_thread(thread* ); // 移除一个线程
void join_all(); //全部等待结束,即阻塞当前线程,等待其它线程运行完成
3:实例
#include <boost/thread/thread.hpp>
#include <boost/bind.hpp>
#include <boost/thread/mutex.hpp>
#include <iostream>
using namespace boost;
using namespace std;
boost::mutex iomutex;
void runChild(const int n)
{
{
boost::mutex::scoped_lock lock(iomutex);
cout << "我是第" << n << "个子线程" << endl;
}
{
boost::mutex::scoped_lock lock(iomutex);
cout << "进程" << n << "退出" << endl;
}
}
int main(int argc, char** argv)
{
boost::thread_group group;
for(int num=0;num<5;num++)
{
group.create_thread(bind(&runChild,num));
}
group.join_all();
return 0;
}
运行结果如下:
我是第0个子线程
进程0退出
我是第4个子线程
进程4退出
我是第2个子线程
进程2退出
我是第3个子线程
进程3退出
我是第1个子线程
进程1退出
或:
我是第0个子线程
进程0退出
我是第2个子线程
进程2退出
我是第3个子线程
进程3退出
我是第4个子线程
进程4退出
我是第1个子线程
进程1退出
因此:各个线程的调用顺序是不固定的。
综上,mutex是互斥,bind是绑定函数和函数的参数,thread_group即线程组。
参考:http://blog.sina.com.cn/s/blog_788c13b00100v7ma.html
线程并发中std::mutex和boost::mutex::scoped_lock的使用:线程并发中std::mutex和boost::mutex::scoped_lock的使用_文科升的博客-CSDN博客_boost mutex scoped_lock1.为什么需要互斥锁软件系统中往往存在多个线程共同来工作,如果多个线程同时对系统中的临界资源(或者代码段)进行访问的话,很容易发生混乱。比如打印机是临界资源,如果多个线程同时都要调用打印机来进行打印的话会出现什么情况?例如有两个线程都要打印,第一个线程调用打印机后在它所处的时间片内还没有打印完成的时候,打印机被第二个线程占有了,这样第一个线程的打印任务就被迫终止了。其实在笔者上学的时候,我们老师讲这里的时候举了一个很简单的例子:你家的卫生间只有一个,家里有多个人,在一个人上卫生间的时候,如果其他人也https://blog.csdn.net/moyu123456789/article/details/109472348