- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程同步练习课件
习题课 进程同步练习 ——进程同步练习 信号量 typedef struct { int value; struct process *L; }semaphore; P操作 P(S){ S.value--; if(S.value 0){把此进程回到到与此资源相关的等待队列中并将此进程挂起} } V操作 V(S){ s.value++; if(S.value = 0){从此资源相关的等待队列中唤醒一个进程;} } 进程同步问题的求解依据 ——信号量的两种应用 实现进程互斥 分析题目中的资源、互斥资源,设置信号量及初值 分析题目中的进程,及其行为,进程访问的资源 利用所设置的信号量控制进程对资源的访问 必要时增加共享变量(如计数器),进程对共享变量的访问是互斥的 实现进程合作(实现前趋关系) 识别是进程合作类型的题目(一般会有合作、协作、配合之类的字样) 分析进程/语句之间的前趋关系,为每条边设置信号量(初值为0) 利用所设置的信号量控制进程/语句执行的次序 题目1: 一个仓库中只库存两种产品:A和B,需要满足条件如下: A的产品数量-B的产品数量 M B的产品数量-A的产品数量 N 每次只能存一种产品 其中M,N均为整数。 分析: A数量与B数量相互制约,假设当前时刻A最多可以再存Sa个,B最多可以再存Sb个,则Sa初值为M-1,Sb初值为N-1,A每库存一个,Sa应该减1(减少一个),Sb应该加1(A加1,B同样加1,题中两个不等式仍然成立);同理B每库存一个Sb减1,Sa加1。每次只能存一种产品表明仓库中临界资源,设置信号量mutex, 初值为1。 semaphore mutex=1; semaphore Sa=M-1, Sb=N-1; ProcessA(){ P(Sa); P(mutex); 存一个A产品; V(Sb); V(mutex); } ProcessB(){ P(Sb); P(mutex); 存一个B产品; V(Sa); V(mutex); } 题目2: 三个合作进程A,B,C,需要依次通过同一台输入设备输入各自的数据a,b,c,且输入设备互斥,A接受a,B接受b,C接受c。 A,B,C分别进行如下运算: A: x=a+b B: y=a*b C: z=y+c-a 最终由A进程将x,y,z结果打印出来。 分析: 由于依次通过同一设备,故顺序为A-B-C,即图中的1,4. A中需要B输入的数据b,所以必须在B接收完b后A的计算才能运行。即图的2 C需要B的运算结果,故C要等B计算完后才能计算,即图的5 A需要B,C的运算结果y,z,所以必须B,C计算完成后A才能打印,即图的3,6 输入设备是互斥的,需要互斥信号量。 只要理解一个同步的情况,上面6个同步的情况就非常简单: 若B先于A执行,则P(S)由于S.value–后0故挂起;当A执行V(S)后执行S.value++后S.value=0满足value=0唤醒B,即A先于B执行。 为方便记忆: 题目3; 一条小河上有一座独木桥,规定每次只允许一人过桥。如果把每个过桥看作一个进程,为保证安全,请用信号量操作实现正确管理。 begin s:semaphore; s:=1; cobegin begin wait(s); 过桥; signal(s); end Coend end 题目4: 一个快餐店,有两个厨师,一个做中餐,一个做西餐,厨师做完一份食物就放在窗口,由顾客自取。窗口只能放下一份食物。到店顾客分两类:要么只吃中餐,要么只吃西餐。试实现进程同步。 分析: 窗口只能放一份食物,是临界资源,设一互斥信号量mutex,初值为1 两个资源信号量:中餐S1,西餐S2,初值都为0 四个进程:中餐厨师,西餐厨师,中餐顾客,西餐顾客 var mu
文档评论(0)