- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例3:用信号量解决互斥问题 Semaphore mutex = 1; count = 5; P1: P(mutex); R1 = count; R1++; count = R1; V(mutex); P2 : P(mutex); R2 = count; R2++; count = R2; V(mutex); P1执行P(mutex), mutex = 0 P2执行P(mutex), mutex = -1, P2阻塞 P1执行3句代码,count = 6 P1执行V(muetx),mutex = 0,唤醒一个等待mutex的进程,即P2 P2执行3句代码,count = 7 P2执行V(muetx),mutex = 1 semaphore S = 1; Ak = 3; Pi: P(S); Ri=Ak; //AK为余票 if(Ri=1) { Ri = Ri -1; Ak = Ri 输出一张票; } else { 输出”票已售完“ } V(S); P1执行P(S), S= 0 P2执行P(S), S = -1, P2阻塞 P3执行P(S), S = -2, P3阻塞 P4执行P(S), S = -3, P4阻塞 P1执行代码,AK = 2,输出一张票 P1执行V(S),S = -2,唤醒一个等待S的进程(P2/P3/P4其中一个) 假设P3被唤醒,P2,P4仍然阻塞 P3执行代码,AK = 1,输出一张票 P3执行V(S),S = -1,唤醒一个等待S的进程(P2/P4其中一个) 假设P2被唤醒,P4仍然阻塞 P2执行代码,AK = 0,输出一张票 P2执行V(S),S = 0,唤醒一个等待S的进程,P4 P4执行代码,进入else,输出票已售完 P4执行V(S),S = 1 例4 Semaphore S = 1; Pi: P(S); {临界区Ci(访问共享资源的代码)} V(S); 假设有n个进程P1,P2,P3..Pn共享某一资源,任意时刻只允许一个进程访问该资源,它们各自的临界区分别为C1,C2…Cn。 例5 有4个并发执行的进程A,B,C,D,它们在执行时都要读共享文件F。限定:不允许进程A和进程B同时读文件F,不允许进程C和进程D同时读文件F。写出用PV操作管理时四个进程的程序。 semaphore S1 = 1;//用于AB互斥 semaphore S2 = 1;//用于CD互斥 A:P(S1); read file F; V(S1); B: P(S1); read file F; V(S1); D: P(S2); read file F; V(S2); C: P(S2); read file F; V(S2); 例6 某系统允许最多10个进程同时读文件F,当同时 读文件F的进程不满10个时,欲读该文件的其他 进程可立即读,当已有10个进程在读文件F时其 他欲读文件F的进程必须等待,直至有进程读完 后退出方可去读, 写出进程并发执行时的程序。 Semaphore S = 10; Readeri : P(S); read file F; V(s); 例7 设有一个售票大厅,可容纳200人购票。如果厅内不足200人,则允许进入,超过则在厅外等候;售票员某时只能给一个购票者服务,购票者买完票后就离开,用P、V操作描述购票者的工作过程。 semaphore S1 = 200; semaphore S2 = 1; buyer(i) : P(S1); 进大厅 P(S2); 购票 V(S2); 出大厅 V(S1); 例8 假定一个阅览室可供50个人同时阅读。读者进入和离开阅览室时都必须在阅览室入口的一个登记表上登记,阅览室有50个座位,规定每次只允许一个人登记或注销登记。用PV操作描述读者进程的同步算法(阅读、登记、注销可用自然语言描述) semaphore S1 = 50; semaphore S2 = 1; reader : P(S1); P(S2);
文档评论(0)