学习笔记(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通知多个线程。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页