进程管理五经典进程同步问题46.pptVIP

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* producer: begin repeat produce an item in nextp; Swait(empty,mutex); buffer(in):=nextp; in:=(in+1)mod n; Ssignal(mutex,full); until false; end consumer: begin repeat Swait(full,mutex); Nextc:=buffer(out); Out:=(out+1) mod n; Ssignal(mutex,empty); consumer the item in nextc; until false; end * 2. 一般“信号量集” 一次需要N个某类临界资源时,就要进行N次wait操作--低效又可能死锁 基本思想:在AND型信号量集的基础上进行扩充:进程对信号量Si的测试值为ti(用于信号量的判断,即当Si= ti时,表示可用资源数量大于ti,才分配资源,否则便不予分配),占用值为di(用于信号量的增减,即 分配资源时Si = Si – di 释放资源时Si = Si + di) Swait(S1, t1, d1; ...; Sn, tn, dn); Ssignal(S1, d1; ...; Sn, dn); 一般信号量集用于同时需要多种资源、每种占用的数目不同、且可分配的资源还存在一个临界值时的处理; * Swait(S1,t1,d1, S2,t2,d2 …, Sn,tn,dn) if (S1 =t1 and S2 =t2 and … and Sn = tn) then //所有资源都满足要求时的处理; for i: = 1 to n do Si=Si-di; endfor else //某些资源不够时的处理; 调用进程进入第一个小于ti的信号量的等待队列Si.L; 阻塞调用进程;将调用进程的PC置为swait操作开头 endif * Ssignal(S1, d1,S2,d2, …, Sn,dn) for i: = 1 to n do Si=Si+di;/*释放占用的资源*/ /*检查每种资源的等待队列的所有进程,从等待队列Si.queue中取出进程P进入就绪队列;*/ endfor * 一般信号量集的几种特定情况: Swait(S, d, d)表示每次申请d个资源,当少于d个时,便不分配; Swait(S, 1, 1)表示互斥信号量; Swait(S, 1, 0)作为一个可控开关 当S=1时,允许多个进程进入临界区; 当S=0时,禁止任何进程进入临界区; 一般信号量集未必成对使用Swait和Ssignal:如:一起申请,但不一起释放; * 2. 读者-写者问题(the readers-writers problem) 问题描述 写者向数据区放数据,读者从数据区获取数据 多个读者可同时读取数据 多个写者不能同时写数据 读者和写者的控制策略变化多端 * 读者-写者问题的信号量解法 互斥关系分析 读者和写者不能同时进入共享数据区 多个写者不能同时进入共享数据区 多个读者可以同时进入共享数据区 同步关系分析 读者进入缓冲区,写者必须等待 写者进入缓冲区,读者必须等待 三种类型: 读者优先:一旦有读者进入,则后续读者均可进入 合理顺序:读者在先来的写者之后 写者优先:只要有写者等待,则后续读者必须等待 写--写互斥 * 如果读者来: 1)无读者、写者:新读者可以读 2)有写者等待,但有其它读者正在读:新读者也可以读 3)有写者写:新读者等 如果写者来: 1)无读者:新写者可以写 2)有读者:新写者等待 3)有其它写者:新写者等待 读--写互斥 读--写互斥 写--写互斥 读--写互斥 读--写互斥 写—写互斥: 互斥信号量Wmutex 怎样判断有没有读者在读? * 增加一个公共变量Readcount,表示当前有几个读者进程在读。 新来一个读者进程,Readcount加1; 撤销一个读者进程,Readcount减1; 第一个读者:阻塞所有写者进程;允许其他读者进程执行。 最后一个读者:唤醒可能的写者进程。 Readcount成为临界资源,必须互斥访问: 增加互斥信号量Rmutex * 采用信号量机制: 两个进程: Reader、Writer 两个信号量 Wmutex表示读者和写者之间互斥,初值是1。 公共变量Readcount表示“正在读”的进程数,初值是0; Rmutex表示读者对Readcount的互斥操作,初值是1。 Readcount=0时允许写 总

文档评论(0)

178****9325 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档