【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
生活随笔
收集整理的這篇文章主要介紹了
【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目
某寺廟,住著一個(gè)老和尚和若干小和尚,有一個(gè)水缸,由小和尚提水入缸供老和尚飲用。水缸可以容納10桶水,水取自同一口井中,由于水井口窄,每次只能容納一個(gè)水桶取水,水桶總數(shù)為3個(gè)。每次往水缸中倒水與從水缸中取水僅為一桶,且不可同時(shí)進(jìn)行。試給出小和尚打水、倒水和老和尚取水的算法描述,并說(shuō)明各信號(hào)量的含義并賦初值。
begin
parbegin
pold; //老和尚進(jìn)程
plittle_1; plittle_2; plittle_3; … //小和尚進(jìn)程
parend
end
答案
代碼
/*互斥信號(hào)量mutex1代表互斥使用水井,初值為1;互斥信號(hào)量mutex2代表互斥使用水缸,初值為1;信號(hào)量count代表桶的數(shù)目,初值為3;用empty代表可以提水入缸的捅數(shù)(可理解為水缸中有10個(gè)單元格,每個(gè)單元格可放入1桶水),初值為10(初始10個(gè)單元格都是空的,可放入10桶水);用full代表水缸中的已有水的捅數(shù),初值為0(初始10個(gè)單元格都是沒(méi)有水的)*/Var mutex1,mutex2,count,empty,full : semaphore:=1,1,3,10,0;plittle_i: //第i個(gè)小和尚進(jìn)程beginrepeatwait(empty);//水缸有否空位置(即是否滿,滿則等;不滿可入缸的捅數(shù)減1)wait(count);//有否有可用的桶(沒(méi)有等;有則使用:count減1)wait(mutex1);//水井是否正被占用;注:上述3行共有6種組合順序,試一試哪些組合可行,哪些不行從水井取水;signal(mutex1);//離開(kāi)水井wait(mutex2);//水缸是否正被占用倒水入水缸;signal(mutex2);//離開(kāi)水缸signal(count);//歸還水桶signal(full);//水缸中的已有水的捅數(shù)增加1桶until falseendpold; //老和尚進(jìn)程beginrepeatwait(full);//水缸中是否有水可取(沒(méi)有則等;有則已有水的捅數(shù)減1)wait(count);//有否有可用的桶(沒(méi)有等;有則使用:count減1)wait(mutex2);//水缸是否正被占用;上述3行共有6種組合順序,試一試哪些組合可行,哪些不行從水缸中取水;signal(mutex2);//離開(kāi)水缸signal(count);//歸還水桶signal(empty);//水缸中可入缸的捅數(shù)增加1桶until falseend總結(jié)
以上是生活随笔為你收集整理的【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二分钟倒计时c语言编程,c语言分钟倒计时
- 下一篇: Windows 10 封装普通EXE为系