- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例2:用PV操作解决读者和写者之间的同步问题,且写者优先 分析: (1)增加一个写者计数器writecount, 为了对该计数器进行互斥访问,增加信号量wmutex (2)设置信号量x,使一个读者和一个写者竞争访问文件,只要在x上等待的写者能继续执行,其他写者便可以直接竞争写者之间文件的互斥访问权,从而实现写者优先 int readcount, writecount; semaphore mutex=1,wmutex=1,rwmutex=1,x=1; void reader( ) { while(1){ p(x) p(rmutex) ++readcount; if(readcount==1) p(rwmutex); v(rmutex); v(x); read data; p(rmutex); - - readcount; If(readcount==0) v(rwmutex); v(rmutex); } } int readcount, writecount; semaphore mutex=1,wmutex=1,rwmutex=1,x=1; void writer( ) { while(1){ p(wmutex) ++writecount; if(writecount==1) p(x); v(wmutex); p(rwmutex); write data; v(rwmutex); p(wmutex); - - writecount; If(writecount==0) v(x); v(wmutex); } } 例3:改进书上的哲学家进餐算法,通过限制同时进餐的人数来防止死锁 分析1:可引入一个额外的信号量mutex来控制对临界资源叉子的访问权,初值为1 分析2:引入一个初值为4的信号量来限制同时进餐的人数 (2)设信号量S的初值为-1,当一个V操作执行完S:=S+1后,S的值为0,该V操作应该唤醒一个被P操作阻塞得进程。但若V操作不是一个原语,也就是说在一个V操作执行的过程中可以有另一个V操作同时在执行。加入第2个V操作在第1个V操作执行判断语句IFS=0前夜执行了S :=S+1操作,则这时的S值为1。这时第1个操作将不再去唤醒被阻塞得进程。这样的V操作不符合V操作的语义。 (3)同样地,当P操作的执行过程中插入了V操作,也会出现不符合原语语义的情况。例如,在P操作执行完S:=S-1后,S的值为-1,经判断,该进程应该被阻塞。但若要在进行判断后阻塞进程前执行完另外-V操作,则该V操作并没有可以唤醒的被阻塞得进程。而当V操作执行完后继续执行P操作时,该P操作仍将阻塞该进程,这一进程将不被唤醒。对于V操作的执行过程中插入了P操作,也会出现不符合原语语义的情况。例如。在V操作执行完S:=S+1后,S的值为1,该进程无需唤醒其他进程。但若在进行判断前执行了一个P操作,则在后续操作中需要唤醒一个阻塞进程。 例7:试分析m个生产者n个消费者共享K缓冲区问题中各信号量(empty,full,mutex)的取值范围 例8:用P、V原语实现东西向单行道上车辆的正确行驶: 当有车自东向西方向(或自西向东方向)行驶,另一方向上的车辆须等待; 同一方向上的车可以连续通过, 当某一方向上已经没有车辆在单行道上行驶时,另一方向上的车辆即可以进入单行道。 请完善这个程序:(可参考读写者问题) ? begin mutex1,mutex2, wait:semaphore; mutex1,mutex2,wati=1; eastcount,westcount::integer eastcount:=0;westcount:=0 cobegin east_west; west_east; coend; process east_west() begin _________________; eastcount:=eastcount+1; if eastcount=1 then _____________ ; _________; 通过单行道; ________; eastcount:=eastcount-1; if eastcount=0 then______________; V(mutex1); end; 例9:设有8个进程M1,M2,…,M8,它们有如图所示的优先关系,试用PV操作实现这些进程间的同步 例10 假定系统有4个
您可能关注的文档
最近下载
- 2024-2025学年四川省成都市第七中学高一(上)月考物理试卷(10月)(含答案).docx VIP
- 育婴员职业守则课件.pptx VIP
- 蔬菜生产技术课程标准.docx VIP
- 2025中考语文现代文阅读总复习-第1部分 专题12:记叙文阅读之主旨把握(讲义)(教师版).docx VIP
- 硅铁冶炼培训课件.pptx VIP
- 水土保持工程监理规划.pdf VIP
- 政务云平台 第4部分:系统部署和迁移要求_地方标准编制说明.pdf
- DB37T-政务云平台监管指标体系及编制说明.pdf VIP
- 高中物理必修二第一章检试测卷.doc VIP
- DB37T 4394.4—2024政务云平台 第4部分:系统部署和迁移要求.pdf VIP
文档评论(0)