当前位置: 首页 > news >正文

wordpress建站模板百度app 浏览器

wordpress建站模板,百度app 浏览器,河北斯皮尔网站建设,做网站做生意问题描述:父亲每次都会放一个水果在桌子上,女儿喜欢吃香蕉(只吃香蕉), 儿子喜欢吃苹果(只吃苹果)。父亲每次只会随机往桌子上放一个水果(苹果或香蕉),儿子&am…

  问题描述:父亲每次都会放一个水果在桌子上,女儿喜欢吃香蕉(只吃香蕉), 儿子喜欢吃苹果(只吃苹果)。父亲每次只会随机往桌子上放一个水果(苹果或香蕉),儿子,女儿会来取。使用p、v操作来完成父亲、儿子、女儿的同步行为模拟。

  问题分析:由上述描述我们可以知道,桌子就是一个缓冲区(单缓冲),同一时刻,只能有一个人对它进行放和取得操作。所以桌子就是一个互斥信号量。而桌子上有苹果,且父亲没有放,儿子才能取,女儿也是同理。所以应该还有两个资源信号量:1 苹果 2 香蕉

在由题意分析可知,三个信号量的初始值应该为 1 0 0 因为桌子只能放一个水果。而在开始的时候,桌子上是空的(所以可以进行放的操作),所以苹果、香蕉初始资源量都为空。

  代码实现:

       1.信号量设定如下:

    /*** 缓冲区是否满信号量*/Semaphore empty;/*** 苹果信号量*/Semaphore apple;/*** 香蕉信号量*/Semaphore banana;empty = new Semaphore(1);
apple = new Semaphore(0);
banana = new Semaphore(0);

 

       2.父亲的放的线程,只有在桌子互斥资源量可以用的时候才能进行放的操作。所以要先p一下桌子信号量。

       

Thread fatherThread = new Thread(new Runnable() {String className = "father";@Overridepublic void run() {// TODO Auto-generated method stubwhile(true) {Semaphore.Wait(empty, className);if (randomAB()) {System.out.println(className + "往盘子里放了一个苹果");Semaphore.Signal(apple, className);} else {System.out.println(className + "往盘子里放了一个香蕉");Semaphore.Signal(banana, className);}System.out.println(className + "完成了一次放的操作");//随机生成休眠时间,代表放入产品的操作时间long millis = (long) (Math.random() * 1000);try {Thread.sleep(millis);} catch (InterruptedException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}}}});

       3.儿子的实现,要判断是否有苹果,没有的话就等待

    Thread sonThread = new Thread(new Runnable() {String className = "son";@Overridepublic void run() {// TODO Auto-generated method stubwhile(true) {Semaphore.Wait(apple, className);System.out.println(className + "从盘子里取了一个苹果");//随机生成休眠时间,代表放入产品的操作时间long millis = (long) (Math.random() * 1000);try {Thread.sleep(millis);} catch (InterruptedException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}System.out.println(className + "吃了一个苹果");Semaphore.Signal(empty, className);System.out.println(className + "完成了一次取吃的操作");}}});

      4.女儿的代码实现:原理跟儿子的类似

    Thread daughterThread = new Thread(new Runnable() {String className = "daughter";@Overridepublic void run() {// TODO Auto-generated method stubwhile(true) {Semaphore.Wait(banana, className);System.out.println(className + "从盘子里取了一个香蕉");//随机生成休眠时间,代表放入产品的操作时间long millis = (long) (Math.random() * 1000);try {Thread.sleep(millis);} catch (InterruptedException e) {// TODO Auto-generated catch block
                    e.printStackTrace();}System.out.println(className + "吃了一个香蕉");Semaphore.Signal(empty, className);System.out.println(className + "完成了一次取吃的操作");}}});

 

运行结果如下:

daughter被阻塞
son被阻塞
father往盘子里放了一个香蕉
father资源量足够,唤醒一个
father完成了一次放的操作
daughter从盘子里取了一个香蕉
daughter吃了一个香蕉
daughter完成了一次取吃的操作
daughter被阻塞
father往盘子里放了一个香蕉
father资源量足够,唤醒一个
father完成了一次放的操作
daughter从盘子里取了一个香蕉
father被阻塞
daughter吃了一个香蕉
daughter资源量足够,唤醒一个
daughter完成了一次取吃的操作
....

 

转载于:https://www.cnblogs.com/zyp4614/p/6555530.html

http://www.lbrq.cn/news/2422855.html

相关文章:

  • 网站的访问量统计怎么做国外seo工具
  • 珠海网站建设维护互联网搜索引擎有哪些
  • 做网站的公司属于什么行业百度关键词搜索推广
  • 云南旅行社网站开发举出最新的网络营销的案例
  • 核动力网站建设百度搜索竞价
  • 校园网站建设与实现毕业论文百青藤广告联盟
  • 常州网站建设公司服务seo百度首页排名业务
  • wordpress图片一排seo技术学院
  • 网站外链建设与维护品牌运营中心
  • 沈阳网站建设 网络服务水果网络营销策划方案
  • 大学网站建设公司网站建设山东聚搜网络
  • 苏州做网站公司乛 苏州聚尚网络网址大全2345
  • 温州手机网站制作联系电话网站开发的流程
  • 个人怎么建设图书网站推广引流渠道有哪些
  • 旅游网站建设注册网游推广
  • 网站域名备案与不备案的区别软文广告是什么意思
  • 网站设计与管理的软件怎么做网络宣传推广
  • wordpress上传大小限制东莞网络推广优化排名
  • wordpress会员计时重庆黄埔seo整站优化
  • wordpress调整侧边栏的高度百度seo和sem
  • 网站做电话线用二十四个关键词
  • 网站建设教程 冰美人视频网络推广费计入什么科目
  • 做包皮医院网站百度手机版下载
  • 陕西 网站建设sem优化师是做什么的
  • 新手做网站做什么样的竞价被恶意点击怎么办
  • 做网站用什么系统好竞价广告
  • 郑州的做网站公司天津seo技术教程
  • 厦门网站建设哪家公司好关键词seo排名怎么样
  • 商洛网站制作seo合作
  • 免费企业建站系统排名360搜索优化
  • 奥比中光深度相机开发
  • Linux学习之Linux系统权限
  • 机器视觉---深度图像存储格式
  • nginx定期清理日志
  • 黑马教程Webday6
  • 市场数据+幸存者偏差提问,有趣的思考?