is impossible for a depositing thread to know that it made such a condition true. It makes sense in this case to allow each waiting thread into the monitor (one at a time) to check if its assertion is true. Implicit condition variable monitors In the Java language, each object may be used as a monitor. Methods requiring mutual exclusion must be explicitly marked with the synchronized keyword. Blocks of code may also be marked by synchronized. Rather than having explicit condition variables, each monitor (i.e., object) is equipped with a single wait queue in addition to its entrance queue. All waiting is done on this single wait queue and all notify and notifyAll operations apply to this queue. This approach has been adopted in other languages, for example C#. Implicit signaling Another approach to signaling is to omit the signal operation. Whenever a thread leaves the monitor (by returning or waiting), the assertions of all waiting threads are evaluated until one is found to be true. In such a system, condition variables are not needed, but the assertions must be explicitly coded. The contract for wait is wait : precondition modifies the state of the monitor postcondition and History Brinch Hansen and Hoare developed the monitor concept in the early 1970s, based on earlier ideas of their own and of Edsger Dijkstra. Brinch Hansen published the first monitor notation, adopting the class concept of Simula 67, and invented a queueing mechanism. Hoare refined the rules of process resumption. Brinch Hansen created the first implementation of monitors, in Concurrent Pascal. Hoare demonstrated their equivalence to semaphores. Monitors (and Concurrent Pascal) were soon used to structure process synchronization in the Solo operating system. Programming languages that have supported monitors include: Ada since Ada 95 (as protected objects) C# (and other languages that use the .NET Framework) Concurrent Euclid Concurrent Pascal D Delphi (Delphi 2009 and above, via TObject.Monitor) Java (via the wait and notify methods) Go Mesa Modula-3 Python (via threading.Condition object) Ruby Squeak Smalltalk Turing, Turing+, and Object-Oriented Turing µC++ Visual Prolog A number of libraries have been written that allow monitors to be constructed in languages that do not support them natively. When library calls are used, it is up to the programmer to explicitly mark the start and end of code executed with mutual exclusion. Pthreads is one such library. See also Mutual exclusion Communicating sequential processes -