Condition_Variable
介绍
- 条件变量是利用线程间共享的全局变量进行同步的一种机制
- 条件变量是为了控制多线程有顺序地访问共享资源,它和互斥量协同控制多线程有序,互斥地访问共享资源,重要解决的问题是生产者和消费者的问题
variable_condition
variable_condition_any
函数操作
- wait
- wait_for
- notify_one
- notify_all
代码
#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
std::mutex mtx;
std::condition_variable cv;
bool is_goods = false;
bool judgeGoods()
{
return is_goods == true;
}
void consumer(int n)
{
for(int i = 0; i < n; ++i) {
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{ return !is_goods;});
is_goods = true;
std::cout << "Consumer : " << i << std::endl;
cv.notify_one();
}
}
void producer(int n)
{
for(int i = 0; i < n; ++i) {
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{ return is_goods;});
is_goods = false;
std::cout << "Producer : " << i << std::endl;
cv.notify_one();
}
}
int main()
{
std::thread t1(consumer, 10);
std::thread t2(producer, 10);
t1.join();
t2.join();
return 0;
}
总结
- 条件变量和互斥锁一起使用主要是用来解决是生产者和消费者的问题,其中使用的步骤如下
- 定义互斥锁和条件变量
std::condition_variable cv
std::mutex mtx;
- 等待条件满足
std::unique_lock<std::mutex> lck(mtx);
cv.wait(lck, []{ return condition;});
- 通知条件满足
cv.notify_one();
cv.notify_all();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)