管程和条件变量

管程和条件变量

ID:19751738

大小:197.00 KB

页数:49页

时间:2018-10-05

管程和条件变量_第1页
管程和条件变量_第2页
管程和条件变量_第3页
管程和条件变量_第4页
管程和条件变量_第5页
资源描述:

《管程和条件变量》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、3.4管程3.4.1管程和条件变量3.4.2霍尔方法实现管程3.4.3汉森方法实现管程3.4.1什么是管程?(1)为什么要引入管程把分散在各进程中的临界区集中起来进行管理;防止进程有意或无意的违法同步操作,便于用高级语言来书写程序,也便于程序正确性验证。什么是管程?(2)管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块管程有以下属性•共享性:•安全性:•互斥性:管程的基本形式TYPE<管程名>=MONITOR<管程变量说明>;define<(能被其他模块引用的)过

2、程名列表>;use<(要引用的模块外定义的)过程名列表>;procedure<过程名>(<形式参数表>);begin<过程体>;end;……procedure<过程名>(<形式参数表>);begin<过程体>;end;begin<管程的局部数据初始化语句>;end;管程的结构conditionc1wait(c1)…conditioncnwait(cn)Urgentqueuesignal局部数据条件变量过程1过程k出口初始化代码入口管程等待调用的进程队列管程等待区域…管程的示例TYPESSU=MONI

3、TORvarbusy:boolean;nobusy:semaphore;definerequire,return;usewait,signal;procedurerequire;beginifbusythenwait(nobusy);/*调用进程加入等待队列*/busy:=ture;end;procedurereturn;beginbusy:=false;signal(nobusy);/*从等待队列中释放进程*/end;begin/*管程变量初始化*/busy:=false;end;管程的条件变量(

4、1)条件变量:当调用管程过程的进程无法运行时,用于阻塞进程的一种信号量同步原语wait:当一个管程过程发现无法继续时,它在某些条件变量condition上执行wait,这个动作引起调用进程阻塞管程的条件变量(2)另一个进程可以通过对其伙伴在等待的同一个条件变量condition上执行同步原语signal操作来唤醒等待进程。条件变量与P、V操作中信号量的区别?管程的问题讨论使用signal释放等待进程时,可能出现两个进程同时停留在管程内。解决方法:执行signal的进程等待,直到被释放进程退出管程或等

5、待另一个条件被释放进程等待,直到执行signal的进程退出管程或等待另一个条件霍尔采用了第一种办法;汉森选择了两者的折衷,规定管程中的过程所执行的signal操作是过程体的最后一个操作管程与进程作比较(1)•管程定义的是公用数据结构,而进程定义的是私有数据结构;•管程把共享变量上的同步操作集中起来,而临界区却分散在每个进程中;•管程是为管理共享资源而建立的,进程主要是为占有系统资源和实现系统并发性而引入的;管程与进程作比较(2)•管程是被欲使用共享资源的进程所调用的,管程和调用它的进程不能并行工作,

6、而进程之间能并行工作,并发性是其固有特性;•管程是语言或操作系统的成分,不必创建或撤销,而进程有生命周期,由创建而产生至撤销便消亡。3.4.2管程实现:Hoare方法霍尔方法使用P和V操作原语来实现对管程中过程的互斥调用,及实现对共享资源互斥使用的管理。不要求signal操作是过程体的最后一个操作,且wait和signal操作可被设计成可以中断的过程。Hoare管程数据结构(1)1.mutex对每个管程,使用用于管程中过程互斥调用的信号量mutex(初值为1)。进程调用管程中的任何过程时,应执行P(

7、mutex);进程退出管程时应执行V(mutex)开放管程,以便让其他调用者进入。为了使进程在等待资源期间,其他进程能进入管程,故在wait操作中也必须执行V(mutex),否则会妨碍其他进程进入管程,导致无法释放资源。Hoare管程数据结构(2)2.next和next-count对每个管程,引入信号量next(初值为0),凡发出signal操作的进程应该用P(next)挂起自己,直到被释放进程退出管程或产生其他等待条件。进程在退出管程的过程前,须检查是否有别的进程在信号量next上等待,若有,则用

8、V(next)唤醒它。next-count(初值为0),用来记录在next上等待的进程个数。Hoare管程数据结构(3)3.x-sem和x-count引入信号量x-sem(初值为0),申请资源得不到满足时,执行P(x-sem)挂起。由于释放资源时,需要知道是否有别的进程在等待资源,用计数器x-count(初值为0)记录等待资源的进程数。执行signal操作时,应让等待资源的诸进程中的某个进程立即恢复运行,而不让其他进程抢先进入管程,这可以用V(x-sem)来实现。Ho

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。