学习笔记(11):c++11并发与多线程-condition_variable、wait、notify_one、notify_all

立即学习:https://edu.csdn.net/course/play/9377/196527?utm_source=blogtoedu

1. 条件变量std::condition_variable\wait()\notify_one()

std::condition_variable my_cond;

my_cond.wait(subguard1,[this]{

if(!msgRecvQue.empty()){

return true;

 

}

return false;

})

//wait()用来等一个东西

//如果第二个参数lambda表达式返回值是true,那wait()直接返回;

//如果第二个参数lambda表达式返回值是false,那wait()互斥量将解锁,并堵塞到本行。直到其他线程调用notify_once成员函数为止。

//如果没有第二个lambda函数,就和返回false一样。

    //当其他线程使用notify_once

    //b.1 mycond尝试获得锁,获得之后执行后续代码

    //b.2如果没获得锁,就继续休眠

    //b.3如果没有第二个参数,则和返回true一样。

注意:notify_one不是每次都能唤醒wait,只有在wait堵塞时才能成功唤醒。

std::unique_lock<mutex> subguard1(mymutex);

 

 

2.上述代码思考

消息会不会执行的不及时

消息在执行时notify_one无效,因为没有卡在wait();

3.notify_all()

notify_one只能通知一个线程。

notify_all通知多个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值