C++多线程高并发,condition_variable,wait,notify_one,notify_all

C++11中引入了condition_variable,wait,notify_one,notify_all等方法,对多线程编程的编写更加友好,对之前的

std::mutex.lock/unlock
std::unique_lock<std::mutex> myUniqeLock(myMutex,adopt_lock/try_yo_lock/defer_lock)
//进行了补充

先讲原理,condition_variable是一个类,换成java里面的概念就是类锁,它需要和互斥量std::mutex进行绑定使用
使用方法如下:

//声明变量
std::condition_variable myConditon;
std::mutex myMutex;
//使用
//1、首先声明锁
std::unique_lock<std::mutex> myUniqueLock(myMutex)
//2、进行wait的声明,如果有第二个参数,第二个参数返回true,继续往下走,没有第二个参数,默认返回true
//wait的方法是,wait时释放锁,被唤醒时,首先去获取锁
myUniqueLock.wait(myUniqueLock,[this]{
	//没有此函数,理解意思即可
	return (int)random(0,1) == 1 ? true : false;
});
//写不写unlock都可以,已经在析构函数中进行了unlock的声明
myUniqueLock.unlock();

在另外的线程中,需要进行notify

std::unique_lock<std::mutex> myUniqueLock(myMutex);
//TODO...
//notify_one()就是唤醒一个wait的线程,all就是唤醒所有wait的线程
//反正都是要重新进行锁的获取的,根据不同的业务需求改变即可
myConditon.notify_one()/notify_all();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值