Monitors provide mutual exclusion and condition variables to synchronize processes. A monitor consists of private variables and procedures, public procedures that act as system calls, and initialization procedures. Condition variables allow processes to wait for events within a monitor. When signaling a condition variable, either the signaling process waits or the released process waits, depending on whether it uses the Hoare type or Mesa type.