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