C++ boost::thread_group 编程

多线程编程:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值