我最近被教导了监视器的概念。我的教授说“每次只有一个线程可以在监视器中”。我不确定我是否明白这一点,这就是我进行研究的原因。Wikipaideia 将我写的内容作为标题。不过,我的书指出,在监视器内部有队列,用于等待的线程,直到满足某些定义的条件。真正让我感到困惑的是,我们得到了一个伪代码,作为监视器有界缓冲区问题的解决方案。
我的问题是:如果一个进程没有被监视器内的 wait() 停止,监视器结构是否保证我们在执行整个方法时不会被上下文切换或只是这样中断没有其他人生产或消费者正在执行他们的方法?. 因为在此,幻灯片:

似乎我们只有在缓冲区为空时才唤醒消费者,而我们只是产生了一个项目。
每次到达该部分代码的生产者都生产了一个项目。为什么我们不每次都发出信号?我认为,我们(可能)认为:如果缓冲区不为空,那么他们可能是“活跃的”消费者等待恢复,因为他们被上下文切换打断了,但后来我想自己这是可能的? 是否有可能在方法内部被中断(不是因为你被“等待”)而是被上下文切换?