Monitors are operating system resources which is nothing but a collection of procedures, variables and data structures.
They are used to achieve atomic mutual exclusion and process synchronization.
Two important point should kept in mind
1) Only one thread can run inside monitor at a time so mutual exclusion always achieved
2) If another thread try to execute monitor process it is blocked until the first completed it's execution, thus more restrictive than semaphore
For more reference
http://www.geeksforgeeks.org/monitors/