1.问题描述
某寺庙,有小和尚、老和尚若干.庙内有一水缸,由小和尚提水入缸,供老和尚饮用。水缸可容纳 10 桶水,每次入水、取水仅为1 桶,不可同时进行。水取自同一井中,水井径窄,每次只能容纳一个水桶取水。设水桶个数为3 个,试用信号量和PV 操作给出老和尚和小和尚的同步算法。
2.问题分析(包括涉及的知识点、制约关系分析、问题的解决思路等)
2.1知识点:
互斥、信号量、P、V原语、同步;
2.2制约关系分析:
水井:小和尚之间互斥;
水缸:小和尚、老和尚之间互斥;
水桶:小和尚、老和尚之间互斥。
2.3信号量设计:
信号量m:
binarysem m=1,代表小和尚从水井提水存在的互斥;
信号量n:
binarysem n=1,代表老和尚从水缸取水、小和尚往水缸倒水;
信号量num:
semaphore num=3,空闲桶的数量;
信号量empty:
semaphore empty=10,代表水缸中还能放几桶水;
信号量full:
semaphore full=0,代表水缸里有几桶水。
2.4问题的解决思路:
大致可以划分成两个进程
2.4.1进程1:小和尚打水倒水
① 若水缸中还能继续入水,则选择空闲的水桶,由于水井径窄,每次只能容纳一个水桶取;所以,当水井无人使用时,从水井里打水。
② 打完水之后,释放水井这个资源,由于水缸每次入水、取水仅为1 桶,且不可同时进行,所以小和尚需要抢占水缸这个资源来倒水,之后释放水缸这个资源,水桶资源也释放,水缸有水。
2.4.2进程2:老和尚喝水
① 若水缸中有水,则选择空闲的水桶,由于水缸每次入水、取水仅为1 桶,且不可同时进行,所以老和尚需要抢占水缸这个资源来取水。
② 老和尚从水缸取完水之后,释放水缸这个资源,水桶资源也释放,empty加1。
3.解决方案(包括所用工具介绍、方案流程图、方案伪代码等)
3.1工具介绍:
jBACI是是一个支持程序并发运行平台。在这个平台上,可以实现操作系统中进程并发、同步等模拟程序的并发执行。jBACI包括了BACI的所有运行程序、C和Pascal编译器、反汇编器、打包工具等核心程序,并可以提供GUI和命令行两种界面来执行程序的并发及其结果的展示,并提供了代码的分部执行功能。
3.2方案流程图:

3.3方案伪代码:
semaphore empty=10,full=0,num=3;
binarysem m=1,n=1;
void young( )
{
while(1)
{
p(empty);
p(num);
p(m);
cout<<“get”<<endl;
v(m);
p(n);
cout<<“put”<<endl;
v(n);
v(num);
v(full);
}
}
void old( )
{
while(1)
{
p(full);
p(num);
p(n);
cout<<“drink”<<endl;
v(n);
v(num);
v(empty);
}
}
void main()
{
cobegin
{
young( );
old( );
}
}
4.实验结果分析(包括结果展示、结果原因刨析等)
4.1结果展示:

4.2结果原因刨析:
经过测试,程序正常运行、结果正确;
通过运用信号量、P、V原语等知识,解决互斥问

【和尚挑水问题】P\V原语,信号量相关推荐

  1. p,v原语解决和尚挑水问题

    和尚挑水问题:寺庙里有多个小.老和尚,一水缸.小和尚打水,老和尚饮水.水缸容积10桶水,水取自同一水井,水井和水缸每次都只容放入一个桶,桶总数3个.试用P.V操作描述和尚取水.饮水的互斥与同步过程. ...

  2. 操作系统实验 P、V原语应用分析

    ** P.V原语应用分析 ** 1.实验原理 (1)Windows操作系统中P操作对应的函数是:WaitForSingleObject(),了解此函数的功能: (2)Windows操作系统中V操作对应 ...

  3. 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进

    桌上有一空盘,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时一次只能放一只水果供吃者取用,请用P.V原语实现爸爸.儿子.女儿三个并发进 ...

  4. 【操作系统】编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。请用P、V原语(wait和signal操作)实现爸爸、儿子、女儿三

    题目 编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.请用P.V原语(wait和signal操作)实现爸爸.儿子.女儿三个并发 ...

  5. 操作系统实验 - 题目三 P、V原语的模拟实现(消费者问题)

    3.1 题目的主要研究内容及预期达到的目标 [设计目的] 理解信号量相关理论:掌握记录型信号量结构:掌握P.V原语实现机制. [课题描述] 本课题针对操作系统中信号量相关理论进行设计,要求编写程序并进 ...

  6. 一个和尚挑水吃,两个和尚抬水吃,三个和尚没水吃

    有这样一个故事.说是一天,三个和尚在一座破落的庙里相遇. 甲和尚触景生情,随口说:"这个庙为什么一片荒废凄凉呢?"乙和尚说:"一定是和尚不虔诚,所以诸神不灵." ...

  7. 和尚挑水安排(回溯问题)

    题意:总共7个和尚,编号从1到7,星期的编号也是1到7,在一个星期中每个和尚在固定的某一天或几天挑水,求所有安排方案,使得每个和尚在一个星期中都有且仅有在其中某一天挑水. 举例: 和尚1 在星期2和星 ...

  8. 每天小练笔10-小和尚挑水(回溯法)

    每天小练笔10-小和尚挑水(回溯法) 题目 某寺庙里7个和尚:轮流挑水.为了和其它任务不能冲突.各人将有空天数列出例如以下表: 和尚1: 星期二,四; 和尚2: 星期一,六; 和尚3: 星期三,日; ...

  9. 和尚挑水故事IT新解

    在昨日写<小谈子对象中接口的设计原则>这篇博文的时候,突然想到三个和尚没水喝的故事,想来特有意思.故再次拿出来说明一下. 一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝.这个寓言故事是大家 ...

最新文章

  1. CNN可视化最新研究方法进展(附结构、算法)
  2. apk私钥_apksigner  |  Android 开发者  |  Android Developers
  3. KG-知识图谱入门-王昊奋课程详细笔记(附课件、课程链接与详细笔记) 内有资源
  4. csv python 图片 存_Python|任意网页中的所有网址的保存
  5. This version of the rendering library is more recent than your version of IntelliJ IDEA.
  6. linux nat span端口镜像,SPAN端口镜像
  7. 【CVE-2020-1957】shiro搭配spring时身份验证绕过漏洞分析
  8. python collections(容器)模块
  9. nginx mime.types php,使用重写和有效的mime类型配置NGINX的正确方法
  10. Android - Activity 生命周期
  11. 【转帖】WEB架构师成长之路之一-走正确的路
  12. 电脑硬盘右击计算机就卡死,Win10电脑使用过程中莫名其妙卡死的的三种解决方法...
  13. ImageOptim-无损图片压缩Mac版
  14. java8中的闭包Function/BiFunction
  15. 100个替代昂贵商业软件的开源应用
  16. 猎头职场:为什么你职场总碌碌无为
  17. 行是知之始,知是行之成
  18. 致创业者:你死的太快,是因为做的太慢
  19. 传输层协议TCP(5)
  20. VBA将ppt保存为html,ppt2013怎样保存为网页的方法

热门文章

  1. LintCode -- k数和
  2. 吐血推荐历史最全的蓝牙协议栈介绍
  3. 我放弃你!因为你的不珍惜:伤感日志
  4. 重置MySQL自增id
  5. 网站基本运营模式和方法
  6. python代码练习2
  7. undertow初始化线程资源解析
  8. 基于socket的可发送表情简单即时通讯
  9. 用计算机控制着挖掘机炒菜图片大全,搞笑GIF:终于学会了用计算机控制挖掘机炒菜了,不知道味道咋样...
  10. 动态规划背包问题之01背包详解