一、虚假唤醒:
notify_one()
或者notify_all()
唤醒wait()
后,实际有些线程可能不满足唤醒的条件:例如使用 notify_one()
两个线程在启动时的第一次唤醒,例如在使用 notify_all()
时多个线程都被唤醒共享区却只有满意少数线程操作,这时就会造成其他线程被虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。
解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。
例如:(通过lambda进行判断防止虚假唤醒)
my_con.wait(myUnique, [this] {
if (!myQue