当前位置:
首页 >
【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒
发布时间:2023/12/20
70
豆豆
生活随笔
收集整理的这篇文章主要介绍了
【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳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语言分钟倒计时
- 下一篇: Windows 10 封装普通EXE为系