当前位置:网站首页>并发-条件变量

并发-条件变量

2022-06-21 09:13:00 彭同学她同桌

std::condition_variable

本质是一个类
一般作用于:
线程A:等待一个条件达成时再运行

函数

std::condition_variable mcv//创建一个条件变量
std::mutex mtex;//创建一个互斥量
vector<int> v;

wait()

如果第二个参数是false 那么wait()将解锁互斥量 并堵塞本行 堵塞到其他某个线程调用notify_one()为止 当在其他线程B中调用完notify_one()后 wait()的线程A就会被唤醒 此时A线程并不会立刻运行后面的代码 而是不断的尝试去获取互斥量锁 如果锁住了 会再次判断wait()的第二个参数
因为在wait()之前会先锁住互斥量 如果wait()第二个参数返回的是false 还不对互斥量解锁的话 则会卡死
如果不写第二个参数 默认是false 直接堵塞

std::unique_lock<std::mutex>mUniqueTex(mtex);
mcv.wait(mUniqueTex,[]{
    
	if(!v.empty())
		return 	true;
	return false;
})

notify_one()

尝试唤醒一个wait()的线程

mcv.notify_one();

notify_all()

尝试唤醒所有wait()的线程

mcv.notify_all();
原网站

版权声明
本文为[彭同学她同桌]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_43535469/article/details/125373770