条件变量的 wait 或者 wait_for 是理解条件变量的关键。wait_for 可以设置超时时间。所以只拿 wait 说。
wait 调用后,先去判断后边的条件(lambda)是否满足,如果满足了直接就返回了,如果不满足就等待被唤醒。当被唤醒后,wait 先把第一个参数加锁,这样其他线程就不能进入关键区,也就不能再次唤醒这个条件变量。wait 检查条件是否满足,如果不满足,释放锁,并继续等待,让其他线程有机会执行。
参考文章:
https://segmentfault.com/a/1190000006679917
https://www.bookstack.cn/read/CPP-Concurrency-In-Action-2ed-2019/content-chapter4-4.1-chinese.md