用于线程间同步
wait:
std::condition_variable
需要配合 std::unique_lock
使用。
std::mutex mutex;
std::condition_variable cv;
bool ready() { return ready;}
...
//声名 unique_lock
std::unique_lock lock(mutex);
//释放lock,并等待被唤醒
//如果被其他线程唤醒,则需要对lock进行上锁,然后 return
cv.wait(lock)
//只有当前置条件 ready 为 false 时,才会进入等待状态
//如果被其他线程唤醒,只有当前置条件 ready 为 true 时,才会去加锁并 return
//能够有效避免虚假唤醒
cv.wait(lock, ready);
//等价于
wahile (!ready()) wait(lock);
notify
//随机唤醒一个等待的线程
cv.notify_one();
//唤醒所有等待的线程
cv.notify_all();
场景:
规避方法:
条件变量和互斥锁同步时序造成的假唤醒,需要使用循环判断前置条件规避虚假唤醒。