1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OS第二章2

* * 哲学家进餐问题 其他解决死锁的办法 最多只允许四位哲学家同时去拿左边筷子,使得最少有一位哲学家可以进餐 哲学家按照奇偶分别先拿其左或右侧筷子,使得五位哲学家都先竞争奇数筷子,再竞争偶数筷子,最后总有一位哲学家可以获得两只筷子进餐 * * 读者-写者问题 “读者(Reader)”进程只读取数据,对数据变化没有影响 “写者(Writer)”进程对数据进行修改 读写问题是指保证一个Writer进程必须与其他进程互斥访问共享对象的同步问题 该问题常用来测试新同步原语 * * 读者-写者问题 利用纪录型信号量解决读写问题 对可供读写的资源设置一个互斥信号量wmutex,用以保证对资源的读写不影响 同时可能有多个reader在读资源,所以设置整型变量readcount纪录读者数目 仅当readcount=0时,即无读者读取数据时,新启动的reader进程才需要执行P(wmutex) 仅当reader执行了对readcount的减量,且其值变为0时,在该reader进程中才需要执行v(wmutex) * * 读者-写者问题 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; 对rmutex的P/V操作保证了对readcount修改的互斥,即一次只有一个读者进程对读者计数器进行修改 当一个读者需要读取数据时,发现自己是当前唯一 申请读取资源的进程时,会主动设置wmutex为写者 不可进,但是对其他读者而言,该进程并不影响其 进入资源读取状态 * * 读者-写者问题 … wait(rmutex); readcount := readcount-1; if readcount=0 then signal(wmutex); signal(rmutex); until false; end 某reader完成读取操作后,发现自己是最后一 个读取资源的reader进程,则在放弃资源控制权前先设置wmutex,使得写者进程有可能在reader退出后立即获得对共享资源的控制权 * * 读者-写者问题 writer:begin repeat wait(wmutex); perform write operation; signal(wmutex); until false; end parend end * * 读者-写者问题 上述解决方法被称为第一读者-写者问题,其基本思想是没有读者会因为有一个写者在等待而主动等待 这种方法可能产生写者饥饿现象 * * 读者-写者问题 第二类读者-写者问题 如果一个写者等待访问资源,则后来的新的读者必须等待其完成才能够读取资源 算法描述 为了提高写者的优先级,增加一个信号量s,用于在写者到达后封锁后继的读者 * * 读者-写者问题 reader: begin repeat p(s); p(rmutex); if(readcount=0) then P(wmutex); readcount := readcount+1; v(rmutex); v(s); perform read operation; p(rmutex); readcount :=readcount-1; if (readcount=0) then v(wmutex); v(wmutex); until false; end writer: begin repeat p(s); p(wmutex);

文档评论(0)

kabudou + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档