父亲儿子女儿三人水果分配
问题:桌子上有一个空盘子,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放橘子。儿子专等吃苹果,女儿专等吃橘子。规定盘中空时,一次只能放一个水果供吃者取用。
要求:使用P、V原语实现爸爸、儿子、女儿,三个并发进程的同步。
实验环境:VS2010
PS:小白操作
以上原理一目了然。C语言实现源码:
#include "stdafx.h"
#include "stdlib.h"
#include "time.h"
#include "windows.h"int plate = 0; //判断盘子是否为空? 初始为0,表示是空的
int SO = 0; //判断盘子里水果是橘子吗? 初始为0,表示不是
int SA = 0; //判断盘子里水果是苹果吗? 初始为0,表示不是
bool S = false; //判断盘子内是否有东西? 初始为false,表示没有东西,可以放//爸爸的线程
void CreateProcessFather()
{while(plate<1){plate++; //盘子里水果个数小于1,+1S=true; //盘子里放东西了,置true srand((unsigned)time(NULL));int a= rand()%100+1;if(a>50){pintf("father puts a apple!\n"); //父亲放苹果SA++;}else{printf("father puts a orange!\n"); //父亲放橘子SO++;}}
}//儿子线程
void CreateProcessSon()
{if(S) //判断盘子里有没有水果,bool变量S{while(SA>0) //判断苹果数量,>1,开始吃{Sleep(3000); //吃苹果时间长printf("son eat a apple!\n");plate--;SA--;S=false; //吃完回置数据}}
}//女儿线程
void CreateProcessDaughter()
{if(S){while(SO>0){Sleep(1000);printf("daughter eat a orange!\n");plate--;SO--;S=false;}}
}
void main()
{int i,n;printf("一共让孩子们吃几次水果?\n"); scanf("%d",&n);for(i=0;i<n;i++){CreateProcessFather();CreateProcessSon(); CreateProcessDaughter();printf("\n");}
}
调试发现,次数太少,容易误认为执行错误。因为所有输出结果都可能一样。思考一下,可能是伪随机数生成的问题。
为了使儿女更加公平,用奇偶数判别,修改代码如下:
新的运行结果相对公平许多。
父亲儿子女儿三人水果分配相关推荐
- 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)
问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序. 问题分析及思路: ...
- Windows下父亲儿子女儿放取水果进程同步的演示程序
问题描述 桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果.试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步.提示:设置一个信号量表示可 ...
- 父亲儿子女儿放取水果进程/线程间通信程序设计与实现
父亲儿子女儿放取水果进程/线程间通信程序设计与实现 代码: #include<unistd.h> #include<stdio.h> #include<pthread.h ...
- 操作系统-父亲儿子女儿分苹果桔子进程同步
#include<iostream> #include<windows.h> #include<stdio.h> using namespace std; HAND ...
- 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。
问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步. 问题分析及思路: 本题 ...
- 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。
1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...
- 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进
桌上有一空盘,允许存放一只水果.爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.规定当盘空时一次只能放一只水果供吃者取用,请用P.V原语实现爸爸.儿子.女儿三个并发进 ...
- 爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题
在PV操作中会有一个经典的例子就是爸爸妈妈儿子女儿吃水果问题,爸爸妈妈向盘子里放入水果,儿子女儿向盘子取水果.然而爸爸只向盘子放苹果,妈妈只向盘子放橘子,女儿只能吃苹果,儿子只能吃橘子.并且盘子里只能 ...
- 【操作系统】编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。请用P、V原语(wait和signal操作)实现爸爸、儿子、女儿三
题目 编程实现如下互斥同步问题:桌上有一空盘,爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果.请用P.V原语(wait和signal操作)实现爸爸.儿子.女儿三个并发 ...
最新文章
- AI 图像傅里叶变换
- Memcached缓存实例
- 高并发负载均衡(三):LVS的DR模型试验搭建
- 翻译附图中的大量文字
- 【kafka】kerberos Server not found in Kerberos database LOOKING_UP_SERVER Identifier doesn‘t match
- DispatcherServlet与初始化主线
- 如何理解 scanf(%*s,str)?
- 在linux下运行.o文件,Linux环境下在可执行程序中嵌入资源文件
- EditPlus中文版 安装教程
- 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
- c语言笛卡尔坐标系,CAD笛卡尔坐标系(直角坐标系),极坐标系精讲,看完秒会...
- Flutter中,idevice_id和iproxy无法打开的问题(真机调试卡在启动页进不去)
- 将最新Chromium浏览器集成到.NET应用程序中
- Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向...
- Unity之ASE实现冰冻效果
- 关于摄影的若干个命题
- html 全景图three,Three.js 3D 城市模型(全景图)
- 西藏加牙村织毯艺人被俗称为“栽毛匠”/地毯品牌
- zabbix3.0邮件报警
- mysql学习过程中推荐的书籍
热门文章
- WAIC 2022|飞桨与硬件生态伙伴共论软硬协同发展新路径
- 模型训练遇到数据量太大而导致内存不够问题?今天教你一招
- Python笔记_50_ORM_多表操作
- java poi导出word图片_poi 导出word,导出图片解决方法
- 神经网络在电商中的应用,神搜电商科技
- 内容安全最佳实践 | 腾讯云COS这个案例,教你轻松规避内容风险
- 全面解析余额宝技术架构及演进
- vscode报错未能保存,文件的内容较新
- python怎么输出斜杠_python如何输出反斜杠
- 掌门1对1微服务体系 Solar | 阿里巴巴 Sentinel 落地实践