Thread Synchronization - Condition Variables
When we want two threads to 'synchronize' with each other - e.g. having one thread prepare some data for processing, and notify another thread that it should process this data. This may be done using a 'condition variable'.
A condition variable is an object that allows one thread to wait on, without doing a 'busy wait' - until another thread signals the condition variable. when this signaling takes place, the first thread wakes, and may do what it wishes to do.
A condition variable does not provide locking itself - it uses a mutex to avoid races.