一.什么是管程
1.1973年,Hoare和Hanson提出管程思想:
将共享变量及对共享变量能够进行的所有操作集中在一个模块中。
(把信号量及其操作原语“封装”在一个对象内部)
二.管程的组成
管程需要封装 (1)一组局部变量 (2)对局部变量操作的一组过程(2)对局部变量进行初始化的语句。
三.管程的特点
1.任何进程只能通过调用管程提供的过程入口才能进入管程访问共享数据;
就如同使用临界资源,就要先通过其信号量的申请。
2.任何时刻,仅允许一个进程在管程中执行某个内部过程。
四.管程的同步控制(条件变量)
1.普通变量
2.条件变量(用于控制进程阻塞和唤醒)
类似信号量变量,但不取具体值;相当于每个阻塞队列的队列指针。
对条件变量的操作需结合对普通变量的条件判断,从而控制进程状态。
3.关于条件变量的操作
x.wait将执行进程挂到x对应的等待队列上;
x.signal唤醒x相应的等待队列上的一个进程。
(signal操作,是重新启动一个被阻塞的进程,但如果没有进程被阻塞,则不产生任何效果 而信号量机制中的signal操作,若没有需要唤醒的进程,必须要做的还有修改信号量变量的值。)
五.管程的优缺点
优点:</