立即学习: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通知多个线程。