BACKGROUND
Semaphores are a simple mechanism for the implementation of synchronization between processes that access the same resource. Each access to a shared resource must be preceded by a request (wait) operation and followed by a signal operation on the same semaphore.
In conditional critical regions each shared resource may be accessed only using conditional critical region statements (region) which guarantee mutual exclusion on the resource.
Monitors encapsulate both a resource and operations that manipulate it. Resources defined in a monitor must be accessed using only the operations defined by the monitor itself.