基本概念
管程(monitor)是一种基本的,高级的同步构造,是为了解决信号量因不正确的使用而导致的一些时序错误而提出的一种高级语言构造。
管程也是进程同步的一种方式,相比于其他进程同步方式,管程将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。
管程只是保证了同一时刻只有一个进程在管程内活动,即管程内定义的操作在同一时刻只被一个进程调用(由编译器实现).但是这样并不能保证进程以设计的顺序执行,因此需要设置condition变量,让进入管程而无法继续执行的进程阻塞自己.
管程由以下几个部分组成:
- 局部于管程内部的共享数据结构说明
- 对该数据结构进行操作的过程
- 对局部于管程内部的共享数据结构设置初始值的语句
使用方法
管程确保一次只有一个进程能在管程内活动,但仍需使用条件变量保证进程以设计的顺序执行,下面以哲学家进餐问题来说明
哲学家进餐问题大概的意思就是有5个哲学家围成一桌,他们每天除了思考问题就是吃饭,由于他们身边只有5只筷子,因此