和尚挑水、猴子过桥问题

和尚挑水、猴子过桥问题

ID:46803612

大小:30.00 KB

页数:6页

时间:2019-11-28

和尚挑水、猴子过桥问题_第1页
和尚挑水、猴子过桥问题_第2页
和尚挑水、猴子过桥问题_第3页
和尚挑水、猴子过桥问题_第4页
和尚挑水、猴子过桥问题_第5页
资源描述:

《和尚挑水、猴子过桥问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.和尚挑水问题:寺庙里有多个小、老和尚,一水缸。小和尚取水,老和尚饮水。水缸容积10桶水,水取自同一水井,水井每次只容一个桶取水,桶总数3个,每次入、取水缸水仅为一桶。试用P、V操作描述和尚取水、饮水的互斥与同步过程。mutex1=mutex2=1;分别代表水井和水缸empty=10;水缸的入水量full=0;水缸的取水量count=3;水桶个数打水:beginp(empty)p(count)p(mutex1)从水井打水;v(mutex1)p(mutex2)往缸中放水v(mutex2)v(full)v(count)end取水:beginp(full)p(count)p(mutex2

2、)从水缸取水v(mutex2)v(count)v(empty)end1.花果山有一处峡谷,横跨峡谷拉了一根绳索(假设为左右方向),猴子可以攀着绳索越过峡谷。只要它们朝着相同的方向,同一时刻可以有多只猴子通过。但是如果在相反的方向上同时有猴子通过则会发生死锁(这些猴子将被卡在绳索中间,假设这些猴子无法在绳索上从另一只猴子身上翻过去)。如果一只猴子相越过峡谷,它必须看当前是否有别的猴子在逆向通过。请使用信号量写一个避免死锁的程序来解决该问题。mutex=1左右过桥公用信号量,实现先来先过桥leftmutex=rightmutex=1从左往右过桥示意如下,从右往左基本和从左往右相同:P(l

3、eftmutex);Ifleftcount=0P(mutex);Leftcount++;V(leftmutex);左至右过桥;P(leftmutex);Leftcount--;Ifleftcount=0V(mutex);V(leftmutex);写者优先(绝对优先)Readable=writable=rmutex=wmutex=1读者:P(readable);P(rmutex);Ifreadcount==0P(wmutex);Readcount++;V(rmutex);V(readable);读操作;P(rmutex);Readcount--;Ifreadcount=0thensig

4、nal(wrmutex);V(rmutex);写者:P(writable);Writecount++;Ifwritecount==1P(readable);V(writable);P(wmutex);写操作;V(wmutex);P(writable);Writecount--;Ifwritecount==0V(readable);V(writable);花果山有一处峡谷,横跨峡谷拉了一根绳索(假设为左右方向),猴子可以攀着绳索越过峡谷。按照“先来先过桥”的原则,只要它们朝着相同的方向,而相反方向又没有猴子排队等待过绳索时,同一时刻可以有多只猴子通过。但是如果相反方向已经有猴子在通过绳

5、索,或更早来到排队过桥,则必须让相反方向猴子先通过,否则可能会发生死锁(假设这些猴子无法在绳索上从另一只猴子身上翻过去)。请使用信号量写一个避免死锁的程序来解决该问题。mutex=1左右过桥公用信号量,实现先来先过桥leftmutex=rightmutex=1从左往右过桥示意如下,从右往左基本和从左往右相同P(mutex);P(leftmutex);Ifleftcount=0P(rightmutex);Leftcount++;V(leftmutex);V(mutex)左至右过桥;P(leftmutex);Leftcount--;Ifleftcount=0V(rightmutex);V

6、(leftmutex);哲学家进餐(同时拿起两根筷子):方法一:(AND)semaphorechopstick[5]={1,1,1,1,1};voidphilosopher(intI){while(true){think();Swait(chopstick[(I+1)]%5,chopstick[I]);eat();Ssignal(chopstick[(I+1)]%5,chopstick[I]);}}方法二:(错误)semaphoremutex=1;semaphorechopstick[5]={1,1,1,1,1};voidphilosopher(intI){while(true){t

7、hink();wait(mutex);wait(chopstick[(I+1)]%5);wait(chopstick[I]);signal(mutex);eat();signal(chopstick[(I+1)]%5);signal(chopstick[I]);}}方法三:semaphoremutex=1;semaphorechopstick[5]={1,1,1,1,1};voidphilosopher(intI){while(true){think();

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。