收藏 分享(赏)

过桥问题.doc

上传人:无敌 文档编号:437790 上传时间:2018-04-06 格式:DOC 页数:5 大小:49KB
下载 相关 举报
过桥问题.doc_第1页
第1页 / 共5页
过桥问题.doc_第2页
第2页 / 共5页
过桥问题.doc_第3页
第3页 / 共5页
过桥问题.doc_第4页
第4页 / 共5页
过桥问题.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、 过桥问题问题描述有一座东西方向的单车道桥,不允许两个方向的车辆同时通过,当东边的汽车和西边的汽车同时上桥时,就出现了死锁。 问题分析过桥问题是并发进程实例。 第一步:解决互斥解决这个问题的一个最简单方法是设置一个公共信号量 S 实现互斥,初值为 1,每一辆车看作一个进程,东边的汽车和西边的汽车过桥过程为: 东边的汽车进程:P(S) ;上桥;V(S) ; 西边的汽车进程: P(S) ;上桥;V(S) ; 这种方法虽然解决了死锁问题,但是这种方法每次只允许一辆车上桥,使得进程的并发程度大大降低。事实上,当东边的一辆车上桥后,东边过来的后边的车都可以跟着上桥。为此,只需要让东边或西边过来的第一辆车

2、争夺上桥的信号量即可。 第二步:提高并发度改进算法使得一边的车只要有一辆在桥上,后面的车就可以上桥。 新算法需要对每边上桥的车辆进行计数,引入整型变量 count1 和 count2,初值都为 0。信号量 s1 和 s2,初值为1,用于对 count1 和 count2 互斥访问;信号量 S,初值为 1,用于东边和西边的第一辆车争夺上桥权利。这样,提高并发程度以后的算法可描述如下: 东边的汽车进程 P(S1);count1 = count1 + 1;if (count1 = 1);P(S);;V(S1);上桥;P(S1);count1 = count1 - 1 ;if (count1 = 0)

3、;V(S); V(S1); 西边的汽车进程 P(S2);count2 = count2 + 1;if (count2 = 1);P(S);V(S2); 上桥;P(S2);count2 = count2 - 1;if (count2 = 0);V(S);V(S2); 仔细分析解法发现:当一边的车已经上桥,后边的车又源源不断的到来时,对面的车会一直得不到上桥的机会。这种现象称为进程饥饿现象。 第三步:消除饥饿现象为公平起见,进一步的改进算法:再增加一个信号量 B,初值为 1。每个准备上桥的车,都需先争夺信号量 B,这样可阻止对面后来的车的上桥机会,从而消除饥饿现象。 东边的汽车进程 P(B); P

4、(S1);count1 = count1 + 1;if (count1 = 1) P(S); V(S1);V(B); 上桥; P(S1);count1 = count1 - 1 if (count1 = 0)V(S); V(S1) ;西边的汽车进程 P(B); P(S2); count2 = count2 + 1; if (count2 = 1) P(S); V(S2);V(B); 上桥;P(S2);count2 = count2 - 1 if (count2 = 0) V(S); V(S2); 睡眠理发师问题问题描述在理发馆中,有一个理发师,一张理发椅和 n 个为等待顾客所设的沙发。如果没有

5、顾客来,理发师就会坐在理发椅上睡觉,当一个顾客来到时,他必须唤醒睡着了的理发师。如果在理发师理发时,又有新的顾客到达,他们要么坐下(如果有空的沙发),要么离开(如果所有的沙发都被坐满)。请用信号量协调理发师和顾客之间的关系。 问题分析从资源的角度来看,理发师问题涉及三个信号量: 理发师是顾客争用的资源,用信号量 barber 表示,初值为 0; 顾客在 n 张沙发上等候,信号量 customers 表示等候理发的顾客数,初值为 0; 信号量 mutex 用于这两个活动对资源 barber、customers 的互斥,初值为 1。 顾客进店后首先申请互斥信号量,检查是否有空闲的椅子(理发椅或沙发

6、) ,如果没有就离开。否则顾客留下,修改沙发数目(临界区) 。顾客通过 barber 信号量唤醒理发师后释放互斥信号量,允许其他顾客进程或理发师进程使用临界区。如果理发师为其他顾客正在理发,这个顾客只能等待。 理发师被第一个顾客唤醒,当理发师醒着时,他用信号量唤醒等待的顾客进程,为顾客理发。 解答Semaphore Customers = 0Semaphore Barber = 0Semaphore accessSeats = 1/互斥信号量int NumberOfFreeSeats = N /沙发总量理发师进程顾客进程while(true) /runs in an infinite loop

7、P(Customers) /检查是否有等待的顾客,如果没有,理发师将去睡觉P(accessSeats) /此刻理发师已被顾客唤醒,要为顾客理发,则空闲沙发数目要加一,需进入临界区修改空闲沙发数目NumberOfFreeSeats+ /多了一个空沙发V(Barber) /理发师准备理发V(accessSeats) /无须再锁住沙发数目了/理发师工作中P(accessSeats) /顾客进店后首先看是否有空位子if ( NumberOfFreeSeats 0 ) /如果有空位子NumberOfFreeSeats- /坐下,空位子减少一个V(Customers) /通知理发师有顾客在等候理发V(ac

8、cessSeats) /无须再锁住沙发数目了P(Barber) /如果理发师忙,顾客要等候/顾客正在理发中 else /很不幸,没有空位子V(accessSeats) /别忘了释放互斥信号量/顾客没有理发就离开了吸烟者问题(Patil, 1971)问题描述三个吸烟者在一间房间内,还有一个香烟供应者。为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴。供应者有丰富的货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸,第三个有自己的火柴。供应者将两样东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再放两样东西(随机地)在桌面上,然后唤醒另一

9、个吸烟者。试为吸烟者和供应者编写程序解决问题。 圣诞老人和小精灵问题描述Santa Claus sleeps in his shop up at the North Pole, and can only be wakened by either all nine reindeer being back from their year long vacation on the beaches of some tropical island in the South Pacific, or by some elves who are having some difficulties making

10、the toys. One elfs problem is never serious enough to wake up Santa (otherwise, he may never get any sleep), so, the elves visit Santa in a group of three. When three elves are having their problems solved, any other elves wishing to visit Santa must wait for those elves to return. If Santa wakes up

11、 to find three elves waiting at his shops door, along with the last reindeer having come back from the tropics, Santa has decided that the elves can wait until after Christmas, because it is more important to get his sleigh ready as soon as possible. (It is assumed that the reindeer dont want to lea

12、ve the tropics, and therefore they stay there until the last possible moment. They might not even come back, but since Santa is footing the bill for their year in paradise . This could also explain the quickness in their delivering of presents, since the reindeer cant wait to get back to where it is

13、 warm.) The penalty for the last reindeer to arrive is that it must get Santa while the others wait in a warming hut before being harnessed to the sleigh. Santa Claus 在他北极的商店中睡眠,他只能被以下两种情况之一唤醒:(1)所有九头驯鹿都从太平洋的假期回来,或者(2)某些小孩在制作玩具时遇到困难。为了让 Santa 多睡一会儿,这些孩子只在三个人都遇到困难时才唤醒他。当三个孩子的问题得到解决,其他想访问 Santa 的孩子必须等到那些孩子返回。如果 Santa 醒来后发现三个孩子在他的店门口等待,并且最后一只鹿已经从热带回来,则 Santa 决定让孩子们等到圣诞节之后,因为准备好雪橇显得更重要些(假设驯鹿不想离开热带,因此它们一直呆到可能的最后时刻)。最后一只鹿必须其他鹿在暖棚中等待并且还没有套上缰绳做成雪橇前回来。请用信号量解决这个问题。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报