管程的思考

管程的思考

@(OS)

一个形象的感性认识:

简单点说就是只能被单个进执行的代码了,举个例子假如一个管程类叫atm(取款机),里面有两个方法叫提款 取款,不同的人为不同的线程,但是atm只允许一个人在一个时间段中进行操作,也就是单线程,那么这个atm就需要一个锁,单一个人在使用时,其他的人只能wait。再者一个人如果使用的时间太长也不行,所以需要一个条件变量来约束他. –摘自网络。

管程的基本思想:将共享变量和对它们的操作集中在一个模块。将分散在各个进程中的临界区集中起来进行统一控制和管理,并且将系统中的共享资源用数据结构抽象的描述出来,然后对临界区的访问通过管程进行统一管理。每一时刻只能由一个进程管理访问。

就像是ATM机器,临界资源都被统一放置在机器内,对临界资源的操纵也封装在机器内,每个人进来取款是一个进程,不允许两个人同时取钱。那么就实现了互斥性。进程之间的同步性也可以通过这个机制完成,我们知道通过PV实现前驱以完成同步,管程也可以限定进程的次序以完成同步。

几句很重要的点:

  • 管程由编程语言实现,编译器提供支持。
  • 管程可以实现进程互斥,进程同步。绝不仅仅是只能实现进程互斥。
  • 任何时刻只能有一个进程在管程中运行
  • 管程内定义的变量自然只能被管程内的过程/线程访问。

掌握这几个点,绝大部分问题可解,暂时只深入到这个层次。

看一个问题:

(2016.32)关于管程的叙述中,错误的是:A
A. 管程只能用于实现进程的互斥
B. 管程是由编程语言支持的进程同步机制
C. 任何时刻只有一个进程在管程中执行
D. 管程中定义的变量只能被管程内的过程访问

分析:思考管程,联想面向对象的编程设计。即,类内部定义的变量只能由类的函数访问,可以暴露接口供外部使用。那么D正确。管程是对临界资源的统一管理,如果允许两个进程在管程内活动,那么临界资源不能满足互斥性。所以C项正确。管程可以实现互斥和同步,B项虽然只提到了同步,也可以说是正确,因为管程确实由编程语言支持。逻辑上说,管程是一种同步机制,也是互斥机制。那么单独说管程是一种同步机制并没错。只不过是一个方面。好比说我是男生,我是学生。都成立。但我还有其他的特征。现在有句判断说我只是个学生,就排外地定义了唯一的特征,这才是错误的说法,比如A就是错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值