The Roots of Condition Variables: Monitors
A monitor is a “magic” module (a collection of procedures and state) with serialized execution and integrated wait/signal primitives.
At most one thread may be active in a given monitor at any time.
A thread may wait in the monitor, allowing another thread to enter.
A thread in the monitor may signal a waiting thread, causing it to return from its wait and reenter the monitor.
CVs are easier to understand if we think about them in terms of the original monitor formulation.
[Brinch Hansen 1973, C.A.R. Hoare 1974]