跳转至内容

操作系统设计/临界区问题/监视器

来自 Wikibooks,开放书籍,开放世界

许多人更喜欢使用监视器作为信号量的替代方案。

监视器本质上是一个带有私有方法和队列的类。想要进入监视器的进程(即运行*任何*私有方法)必须在队列中等待。只有当监视器中没有进程(即没有人运行任何私有方法)时,才允许进程进入队列。监视器本身运行单线程部分。这保证了在任何时刻只有一个进程可以在监视器内执行。

与信号量相比,监视器结构良好,因此易于理解和实现。

信号量的一个常见错误是,一个进程获取信号量,完成它需要做的事情,但意外地没有释放信号量。这个进程可能在程序员注意到其他进程死锁并永远等待有人释放信号量之前就已经完成了。

监视器使这个问题变得不可能。使用监视器的系统仍然有可能死锁,但只有当进程在监视器内陷入无限循环时才会发生,这比一个很久以前似乎已成功完成的进程更容易调试。

进一步阅读

[编辑 | 编辑源代码]

监视器 - 基本概念

华夏公益教科书