题目

某寺庙,住着一个老和尚和若干小和尚,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳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个。每次往水缸中倒相关推荐

  1. 某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用。水缸可容30桶水,水取自同一井中。水井径窄,每次只能容一个水桶取水。水桶总数为5个。每次入、取缸水仅为

    和尚取水问题 某寺庙,有小和尚.老和尚若干.有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用.水缸可容30桶水,水取自同一井中.水井径窄,每次只能容一个水桶取水.水桶总数为5个.每次 ...

  2. 给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在第一根桩柱上。现要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面

    对汉诺塔问题详解,给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在第一根桩柱上.现要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面: 输入 ...

  3. 51单片机主函数实现P1口120ms间隔从P1.7口向右循环进行流水灯每次只能亮一个,进入外部中断是进行120ms的延时灯的亮灭各一次

    51单片机主函数实现P1口120ms间隔从P1.7口向右循环进行流水灯每次只能亮一个,进入外部中断是进行120ms的延时灯的亮灭各一次 #include <reg51.h> #includ ...

  4. 一、汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的。A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆

    一.汉诺塔问题 汉诺塔是由三根杆子A,B,C组成的.A杆上有n个(n>1)穿孔圆盘,盘的尺寸由下到上依次变小.要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘:大盘不能叠在小盘上面.提示: ...

  5. 使用嵌套循环,打印四行五列星星矩形(每次只能打印一个*)

    使用嵌套循环,打印四行五列星星矩形(每次只能打印一个*) ***** ***** ***** ***** 提示:打印不换行,使用 print 方法,不要加 ln 分析: 把*****看成一个整体 字符 ...

  6. 打印机顺序打印问题(一台打印机有若干个任务,但是打印机每次只能打印一个任务,每个任务是有优先级的,从1到9)

    一台打印机有若干个任务,但是打印机每次只能打印一个任务,每个任务是有优先级的,从1到9.打印的时候从序列的第一个开始,如果第一个的 优先级不是最大的,则将其出队,并加入队尾.若其优先级是最大的,则直接 ...

  7. b树删除节点每次只能删一个吗_面试官,请不要问我B+树了!!

    每当我们执行某个 SQL 发现很慢时,都会下意识地反应是否加了索引,那么大家是否有想过加了索引为啥会使数据查找更快呢,索引的底层一般又是用什么结构存储的呢,相信大家看了标题已经有答案了,没错!B+树! ...

  8. 记录一种多个按钮中每次只能选中一个的实现方式

    阐述 本文旨在说明实现的思路. 当窗口创建很多QPushButton或者QPushButton的子类的时候,若要实现在众多的按钮中,每次被点击的按钮被选中,下一次点击另一个按钮的时候,上一个被选中的按 ...

  9. 数据库中查询记录时是否每次只能使用一个索引?

    在网上看一些文章的时候,发现好几次下面这样的话: 如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引 ...

最新文章

  1. oracle win10家庭版,Windows10远程报错:由于CredSSP加密Oracle修正(ps:Win10家庭版)
  2. 64位大内存虚拟机Page File的存放位置
  3. JSON Path表达式
  4. html5开发之viewport使用
  5. 汇编-理解call,ret
  6. 010_mod_fastdfs.conf配置详情
  7. php使用redis做缓存,php使用redis做缓存和使用redis保存session
  8. Python攻克之路-网络编程(文件上传实现思路)
  9. [6]Windows内核情景分析 --APC
  10. UnicodeEncodeError: 'gbk' codec can't encode character '\xeb' in position 20: illegal multibyte sequ
  11. 剪枝实践:图像检索如何加速和省显存 ?
  12. 《杀戮地带:暗影坠落(Killzone: Shadow Fall)》工程师讲解使用屏幕空间反射系统
  13. 拼多多回应“轩尼诗假酒”案:实际售出3单 9月已关闭店铺
  14. 银行计算机系统(第3版),清华大学出版社-图书详情-《银行计算机系统》
  15. Python源码剖析 电子书 配套资源 配套代码
  16. 【路由优化】基于能量均衡高效的LEACH协议改进算法附matlab代码
  17. 超级详细的pytest测试和allure测试报告
  18. VB.net下使用开源免费三维控件Anycad的应用实例分享
  19. MySQL查询某一天数据
  20. ckplayer-超酷网页视频播放器的使用

热门文章

  1. 关于Windsocket脚本运行报错Error Code:9017
  2. 电子商务系统设计经验分享
  3. 什么是SSL数字证书
  4. 【每日一读】High-order Proximity Preserving Information Network Hashing
  5. 能攻破所有安卓设备 最强Root工具诞生 万能一键Root
  6. python polygon_在Python中将Multipolygon转换为Polygon - python
  7. 安装Polygon库
  8. 2020Kali开机配置(中文输入法等)
  9. Java EE入门教程系列第一章Java EE的概述(一)——初识Java EE
  10. 2021年四川高考成绩及录取结果查询,2021年四川高考录取状态查询系统,录取结果什么时候出来公布...