Condition variables provide synchronization primitives used to block a thread until
notified by some other thread that some condition is met or until a system time is
reached
. Class
condition_variable provides a condition variable that can only
wait on an object of type
unique_lock<mutex>, allowing the implementation
to be more efficient
. Class
condition_variable_any provides a general
condition variable that can wait on objects of user-supplied lock types
.