Wait until the std::condition_variable is woken
by a call to notify_one()
or notify_all(),
or a spurious wake up.
void wait(std::unique_lock<std::mutex>& lock);
- Preconditions:
lock.owns_lock()istrue, and the lock is owned by the calling thread.- Effects:
Atomically unlock the supplied
lockobject and block until the the thread is woken by a call tonotify_one()ornotify_all()by another thread, or the thread is woken spuriously. Thelockobject is locked again before the call towait()returns.- Throws:
std::system_errorif the effects cannot be achieved. If thelockobject is unlocked during the call towait(), it is locked again on exit, even if the function exits via an exception.- Note:
The spurious wake ups mean that a thread calling
wait()may wake even though no thread has callednotify_one()ornotify_all(). It is therefore recommended that the overload ofwait()that takes a predicate is used in preference where possible. Otherwise, it is recommended thatwait()be called in a loop which tests the predicate associated with the condition variable.- Synchronization:
Calls to
notify_one(),notify_all(),wait(),wait_for()andwait_until()on a singlestd::condition_variableinstance are serialized. A call tonotify_one()ornotify_all()will only wake threads that started waiting prior to that call.
Header
#include <condition_variable>