欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【操作系统】某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水,水桶总数为3个。每次往水缸中倒

发布时间:2023/12/20 70 豆豆

题目

某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳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个。每次往水缸中倒的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。