管程概念及实现要旨
管程引入了条件变量condition。
wait操作,把当前进程挂到条件变量对应的阻塞队列上去,signal把条件队列上的对手进程唤醒。
注意:条件变量的signal操作和信号量的signal是有区别的。条件变量的signal可能啥都不干,如果有阻塞的进程唤醒,没有啥事都不做。
wait如果资源忙,挂到条件队列上。
把资源使用的操作集中在管程中,使进程的设计更加有条理。
任何时候只有一个进程进入管程。
管程任何时候只有一个进程处于活跃状态。
管程:1 数据:对资源抽象出来的数据,一系列的访问资源的过程中被阻塞而引入的阻塞原因的代表,条件变量 2入口过程。
Hoare管程实现方案
在编译或者实现的时候,对互斥信号量的申请,对紧急等待队列或入口等待队列加上去。