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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40666620/article/details/102638209

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();

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102638209