What I don���t quite understand is why Monitor doesn���t use Semaphore>>critical:. If it did that, then there wouldn���t be a problem. The problem only exists because #wait and #signal are explicitly sent by the monitor.
Monitor is reentral which means that two recursive critical sections in same process should not be blocked. This logic implemented in #enter and #exit methods