Semaphores are simple and powerful, and easy to misconfigure. Monitors Monitors are a language construct, if they exist, they're part of the language. Monitors need a blocking mechanism, which is provided by condition variables. A condition variable isn't really a variable. It doesn't have a value and processes can't examine it.
Condition variables are only synchronization points.
A process blocks by calling wait on a condition. A process releases another process by using the signal system call. This gets messy if the signal led process does another signal . Hansen made the problem somewhat easier by requiring that after a process makes a signal system call, it must immediately exit the monitor. Mesa semantics are the simplest of the three to implement - the process to be awakened is put on the ready queue, and run when the scheduler gets to it.