网站大量收购独家精品文档,联系QQ:2885784924

第2章进程管理(part6).pptVIP

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多
*   说明: 局部于管程内部的数据结构,仅能被局部于管程内部的过程所访问,任何管程外的过程都不能访问它; 反之,局部于管程内部的过程也仅能访问管程内的数据结构。 由此可见,管程相当于围墙,它把共享变量和对它进行操作的若干过程围了起来,所有进程要访问临界资源时,都必须经过管程(相当于通过围墙的门)才能进入,而管程每次只准许一个进程进入管程,从而实现了进程互斥。 Heb Nomal University Department of Computer Science * 第二章 进程管理 2.1 进程的基本概念 2.2 进程控制 2.3 进程同步 2.4 经典进程的同步问题 2.5 管程机制 2.6 进程通信 2.7 线程 * 2.4.3 读者-写者问题 1. 利用记录型信号量解决读者-写者问题 读者写者问题 问题描述 有两组并发进程: 读者和写者,共享一组数据区。 要求: 允许多个读者同时可执行读操作 不允许读者、写者同时操作 不允许多个写者同时操作 * 问题分析 第一类:读者优先 无读者、写者,新读者可以读 有写者等,但有其它读者正在读,则新读者也可以读 有写者写,新读者等 最后一个读者完成访问后,发现写者在等,则唤醒其中一个写着。 写者完成访问后,发现有等待者,按照FIFO或者其它原则唤醒写着或者所有读 第二类:写者优先 多个读者可以同时进行读 写者必须互斥,即只允许一个写者写,也不能 读者写者同时进行,写者优先于读者,即一旦有写者,则后续读者必须等待,唤醒时优先考虑写者 * 变量: Readcount用来表示正在读的进程数目。 信号量: rmutex用来保证读者之间互斥地修改readcount。 wmutex是读者和写者公用的互斥变量,用来互斥读写同时进行 rmutex、wmutex初值为1,readcount初值为0 第一类读者写者问题——读优先 * 读者-写者问题可描述如下: Var rmutex, wmutex:semaphore∶ =1 , 1; Readcount:integer∶ =0; begin parbegin Reader:begin //读者 repeat wait(rmutex); if readcount=0 then wait(wmutex); Readcount∶ =Readcount+1; signal(rmutex); … perform read operation; … wait(rmutex); readcount∶ =readcount-1; if readcount=0 then signal(wmutex);  signal(rmutex); until false; end writer:begin //写者 repeat wait(wmutex); perform write operation; signal(wmutex); until false; end parend end * Reader() { While(1) { P(s); P(rmutex); If (count==0) P(wmutex); /*当第1个读者读文件时,阻止写者写*/ count++ V(rmutex); V(s); 读文件; P(rmutex); count--; } If (count==0) V(wmutex); /*当最后1个读者读完文件时,允许写者写*/ V(rmutex); } writer() { While(1) { P(s); P(wmutex); 写文件; V(wmutex); V(s); } } 第二类读者写者问题——写优先 设3个信号量: rmutex --- 读互斥信号量,初值为1; wmutex --- 写互斥信号量,初值为1; s --- 用于在写进程到达后封锁后续的读者,初值为1; count --- 共享变量,用于记录当

文档评论(0)

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

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

1亿VIP精品文档

相关文档