C++11多线程学习(3)条件变量

本文介绍了C++11中条件变量的使用,强调了其与lamda表达式结合的优势,使得代码更清晰。讨论了unique_lock与lock_guard的差异,并通过一个轮流打印AB的例子来演示条件变量的用法。此外,还提供了一个简单的线程安全队列实现。
摘要由CSDN通过智能技术生成

C++11中的条件变量支持把判断条件写到参数里。配合lamda表达式让程序代码更加清晰。第一个参数只支持unique_lock他和lock_guard的区别在于可以在作用域内加锁再解锁,而lock_gurad只能在构造和析构的时候加锁和解锁。

下面是对cv的小应用,轮流打印AB

#include <thread>
#include <iostream>
#include <mutex>
#include <condition_variable>
 using namespace std;
mutex m;
condition_variable cv;
bool flag = true;
 
void printA()
{
    while(1)
    {
		unique_lock<mutex>ul(m);
		cv.wait(ul,[]{return flag;});	
		cout<<"A"<<endl;
		flag=false;
		cv.notify_one();
    }
}
 
void printB()
{
    while(1)
    {
       unique_lock<mutex>ul(m);
	   cv.wait(ul,[]{return !flag;});
	   cout<<"B"<<endl;
	   flag=true;
	   cv.notify_one();
    }
}
 
int main()
{
    std::thread tA(printA);
    std::thread tB(printB);
    tA.join();
    tB.join();
    return 0;
}

再附一个简单的线程安全队列模型

#includ
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值