定义
管程(Monitor)是一种高级的进程同步机制,将共享资源及其操作封装在一个模块中,统一管理对共享资源的所有访问。
组成
- 管程名称
- 局部于管程内部的共享数据结构
- 对该数据结构进行操作的一组过程(函数)
- 共享数据设置初始值的语句
特点
- 任一时刻最多只有一个进程在管程内执行
- 管程自动实现互斥,无需程序员手动处理
- 提供条件变量(Condition Variable)实现同步
x.wait():阻塞进程,将其插入 x 的阻塞队列x.signal():唤醒在 x 上阻塞的一个进程
与信号量对比
| 特性 | 信号量 | 管程 |
|---|---|---|
| 互斥实现 | 手动 P/V | 自动 |
| 易用性 | 容易出错 | 更安全 |
| 灵活性 | 高 | 受限于管程结构 |