问题:桌子上有一个空盘子,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放橘子。儿子专等吃苹果,女儿专等吃橘子。规定盘中空时,一次只能放一个水果供吃者取用。

要求:使用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");}
}


调试发现,次数太少,容易误认为执行错误。因为所有输出结果都可能一样。思考一下,可能是伪随机数生成的问题。

为了使儿女更加公平,用奇偶数判别,修改代码如下:


新的运行结果相对公平许多。

父亲儿子女儿三人水果分配相关推荐

  1. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)

    问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序. 问题分析及思路: ...

  2. Windows下父亲儿子女儿放取水果进程同步的演示程序

    问题描述 桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果.试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步.提示:设置一个信号量表示可 ...

  3. 父亲儿子女儿放取水果进程/线程间通信程序设计与实现

    父亲儿子女儿放取水果进程/线程间通信程序设计与实现 代码: #include<unistd.h> #include<stdio.h> #include<pthread.h ...

  4. 操作系统-父亲儿子女儿分苹果桔子进程同步

    #include<iostream> #include<windows.h> #include<stdio.h> using namespace std; HAND ...

  5. 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。

    问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步. 问题分析及思路: 本题 ...

  6. 桌上有一只盘子,每次只能放入一个水果。请用Wait()、Signal()原语实现爸爸、儿子、女儿三个并发进程的同步。

    1.桌上有一只盘子,每次只能放入一个水果.爸爸专向盘中放苹果,妈妈专向盘中放桔子,一个女儿专等吃盘中的苹果,一个儿子专等吃盘中的桔子.试用P,V操作写出他们(4个并发进程)能同步的程序. semaph ...

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

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

  8. 爸爸妈妈儿子女儿吃水果问题以及五个哲学家吃饭问题

    在PV操作中会有一个经典的例子就是爸爸妈妈儿子女儿吃水果问题,爸爸妈妈向盘子里放入水果,儿子女儿向盘子取水果.然而爸爸只向盘子放苹果,妈妈只向盘子放橘子,女儿只能吃苹果,儿子只能吃橘子.并且盘子里只能 ...

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

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

最新文章

  1. AI 图像傅里叶变换
  2. Memcached缓存实例
  3. 高并发负载均衡(三):LVS的DR模型试验搭建
  4. 翻译附图中的大量文字
  5. 【kafka】kerberos Server not found in Kerberos database LOOKING_UP_SERVER Identifier doesn‘t match
  6. DispatcherServlet与初始化主线
  7. 如何理解 scanf(%*s,str)?
  8. 在linux下运行.o文件,Linux环境下在可执行程序中嵌入资源文件
  9. EditPlus中文版 安装教程
  10. 思维方式-《策略思维》书中的精髓:生活工作中博弈无处不在,理解博弈论、善用策略思维,能帮助我们做出更好的决策。
  11. c语言笛卡尔坐标系,CAD笛卡尔坐标系(直角坐标系),极坐标系精讲,看完秒会...
  12. Flutter中,idevice_id和iproxy无法打开的问题(真机调试卡在启动页进不去)
  13. 将最新Chromium浏览器集成到.NET应用程序中
  14. Wind7外接显示器选择拓展模式后,鼠标只能往右移动才能切换到外接显示器上,不能修改切换方向...
  15. Unity之ASE实现冰冻效果
  16. 关于摄影的若干个命题
  17. html 全景图three,Three.js 3D 城市模型(全景图)
  18. 西藏加牙村织毯艺人被俗称为“栽毛匠”/地毯品牌
  19. zabbix3.0邮件报警
  20. mysql学习过程中推荐的书籍

热门文章

  1. WAIC 2022|飞桨与硬件生态伙伴共论软硬协同发展新路径
  2. 模型训练遇到数据量太大而导致内存不够问题?今天教你一招
  3. Python笔记_50_ORM_多表操作
  4. java poi导出word图片_poi 导出word,导出图片解决方法
  5. 神经网络在电商中的应用,神搜电商科技
  6. 内容安全最佳实践 | 腾讯云COS这个案例,教你轻松规避内容风险
  7. 全面解析余额宝技术架构及演进
  8. vscode报错未能保存,文件的内容较新
  9. python怎么输出斜杠_python如何输出反斜杠
  10. 掌门1对1微服务体系 Solar | 阿里巴巴 Sentinel 落地实践