A condition variable is a place where a thread can wait
until some condition becomes true. The condition is implicit
in the program. When a thread needs the condition to be true,
but finds that it is false,
it waits on the condition variable. When a thread makes the
condition true, it signal a thread or threads that are waiting
on the condition variable.