Extra Notes On Monitors: (first created on 10/01/2004, last updated on .... )

I'll go over and quote from the classic papers on monitors. Papers that I discuss here are available on-line (you can search for them on google). There are many other important classic papers that  are not  on the Web.
 
Please note, these papers frequently use "processes", instead of "threads", as the entities that require synchronizations. Also, "entering and leaving a monotor" can be read as acquiring and releasing a lock for mutual exclusion.

C. A. R. Hoare, "Monitors: an operating system structuring concept", Commun. ACM 17(10): 549-557 (1974)
In this paper, he writes at one point (quoting):
Later in the same paper, he writes: "Dahl suggests that "signal" should be the last operation of a monitor procedure...."

He shows how (Hoare) monitors can be implemented using semaphores.
Per Brinch Hansen, "Structured Multi-programming",  Commun. ACM 15(7): 574-578 (1972)
In this paper, instead of having two functions, "wait" and "signal", Hansen proposed a primitive called "await (condition)". The OS delays a process until the specified condition is met.

B. Lampson and D. Redell, "Experience with Processes and Monitors in Mesa", Commun. ACM 23(2): 105-117 (1980)
In this paper, the authors discuss synchronization primitives included in the programming language called "Mesa". In Mesa (quoting):
J. Howard, "Signaling in Monitors", IEEE International Conference on Software Engineering, pp 47-52 (1976)
This paper has a nice classification of different monitor semantics (quoting the paper):
In this paper, Howards shows that all these semantics are equivalent. He shows how to implement each semantic with the other one.

Another comprehensive survey paper on different monitors is by P. Buhr, M. Fortier, and M. Coffin "Monitor Classification",  ACM Computing Surveys 27(1): 63-107 (1995)