管程机制
将共享变量及对共享变量能够进行的所有操作集中在一个模块中。
(把信号量及其操作原语封装在一个对象内部)
管程的组成
封装什么?
1.一组局部变量
2.对局部变量操作的一组过程
3.对局部变量进行初始化的语句
生产者-消费者问题中对缓冲区定义一个管程
管程实现同步
1.对共享变量互斥操作
管程的特点直接实现了该要求,进程一次一个进入管程调用内部过程操作共享变量。
管程的互斥访问完全由编译程序在编译时自动添上,无需程序员关心
2.操作的同步控制
靠条件变量的操作管理实现。
进入管程但不能获取资源操作的过程将阻塞,并在满足条件时被唤醒执行
x:代表没有空这种条件
y:代表没有产品这种条件
生产者-消费者问题的管程解决方法
条件变量
(主要作用就是进程同步的阻塞和唤醒控制)
局部于管程的变量有两种:
1.普通变量
2.条件变量(用于控制进程阻塞和唤醒)
类似信号量变量,但不取具体值;相当于每个阻塞队列的队列指针
对条件变量的操作需结合对普通变量的条件判断,从而控制进程状态