end.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
end

* * §4.6 管程的概念 一、管理的引出: 前述的各种互斥、同步手段如Lock, unlock, P, V操作,虽然都有效地实现了互斥与同步,但都存在下列一些通病(缺点): (1) Lock, unlock, P, V操作代码均由用户编写,计算机系统无法有效地控制和管理这些P,V操作; (2) 分散在各进程中的临界段没有集中加以管理; (3) 用户编程时难免会发生不正确地使用P,V操作,这样可能导致死锁; 而编绎程序或O.S都无法发现和纠正此类错误。 总之说明:信号量(P,V)不是最安全的进程通讯手段。 引出较高级的进程通信原语即管程(monitor)可解决这一问题。 二、管程定义: Dijkstra提出为每个共享资源设立一个“秘书”来管理对它的访问。一切来访者都要通过秘书,而秘书每次仅允许一个来访者(进程)访问共享资源。这样既便于系统管理共享资源,又能保证互斥访问和进程间同步。 以后Hansen在并行PASCAL语言中,把“秘书”概念改为管程(monitor)。 1. “ 一个管程是由若干过程、变量和其它数据结构形成的集合。它是管理进程间同步的机制,它保证进程互斥地访问共享变量,并且提供了一个方便的阻塞和唤醒进程的机构。” 2. 其表现形式为一个特殊种类的模块或软件包。 管程由两部分构成: (1) 局部于该管程的数据结构 ––– 共享变量。该共享变量表示其相应的共享资源的状态 (通常系统为每个共享资源设置一个管程); (2) 局部于该管程对上述数据结构进行规定的操作的若干个过程。 局部于管程内的数据结构只能被局部于管程内的过程所访问,不能被管程外的过程对其进行操作。反之,局部于管程内的过程只能访问管程内的数据结构。因此管程相当于围墙一样把共享变量(数据结构)和对它进行的若干操作过程围了起来。进程要共享资源(进入围墙使用某操作过程)就必须经过管程(围墙的门)才能进入,管程每次只允许一个进程进入管程内,即互斥地访问共享资源。 我们仍然以生产者和消费者问题为例,看看管程方法如何实现进程之间同步。仍使用有N个缓冲区的环形缓冲区,每个缓冲区可容纳一个数据记录。In是空缓冲区头指针,Out是满缓冲区头指针。用notfull作为没有满缓冲区的条件变量,notempty作为没有空缓冲区的条件变量。用Count作为当前满缓冲区数量。下面是用管程方法的同步实现。 Program producer/consumer moniter boundedbuffer buffer: array [0..N] of Record; In, Out: integer; notempty, notfull: Condition; Procedure append (x: Record); begin if Count=N then WaitC (notempty); /.缓冲区满,等待./ buffer[In]:= x; In = In+1 modN; Count = Count+1 SignalC (notfull); end procedure take (x: Record); begin if Count = 0 then WaitC (notfull); /.缓冲区空,等待./ x: = buffer [Out]; Out: = Out+1 mod N Count: = Count–1 SignalC (notempty); end begin /.管程体./ In: = Out: = Count: = 0 /.初始化./ end 以上为管程。 Program producer; var x: record; begin repeat 生产 x; append (x); forever end Procedure consumer var x:record; begin repeat take(x); 消费或处理 x; forever end begin (? main program ?) parbegin producer; consumer; parend end . . . §4.1 顺序程序和并行程序 §4.2 进程同步与互斥 一、概念 二、临界段问题

文档评论(0)

daoqqzhuan3 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档