A condition variable is a way for multiple threads to cooperate efficiently as to who is holding a mutex. In particular, CVs allow a group of threads to go to sleep waiting for the mutex to be held and some other condition to be true (e.g., if it is on a shared queue, the condition might be that there is something in the queue) and to be efficiently woken up when the condition might be true.