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

上海大学生兼职做网站云南省住房和城乡建设厅勘察设计处网站

上海大学生兼职做网站,云南省住房和城乡建设厅勘察设计处网站,开发银行助学贷款系统登录官网,自己做音乐网站哲学家就餐问题#xff1a; 哲学家就餐问题是典型的同步问题#xff0c;该问题描述的是五个哲学家共用一张圆桌#xff0c;分别坐在五张椅子上#xff0c;在圆桌上有五个盘子和五个叉子#xff08;如下图#xff09;#xff0c;他们的生活方式是交替的进行思考和进餐 哲学家就餐问题是典型的同步问题该问题描述的是五个哲学家共用一张圆桌分别坐在五张椅子上在圆桌上有五个盘子和五个叉子如下图他们的生活方式是交替的进行思考和进餐思考时不能用餐用餐时不能思考。平时一个哲学家进行思考饥饿时便试图用餐只有在他同时拿到他的盘子左右两边的两个叉子时才能进餐。进餐完毕后他会放下叉子继续思考。请写出代码来解决如上的哲学家就餐问题要求代码返回“当每个哲学家分别需要进食 n 次”时这五位哲学家具体的行为记录。测试用例 输入n 1 1n60n 表示每个哲学家需要进餐的次数。 预期输出 [[4,2,1],[4,1,1],[0,1,1],[2,2,1],[2,1,1],[2,0,3],[2,1,2],[2,2,2],[4,0,3],[4,1,2],[0,2,1],[4,2,2],[3,2,1],[3,1,1],[0,0,3],[0,1,2],[0,2,2],[1,2,1],[1,1,1],[3,0,3],[3,1,2],[3,2,2],[1,0,3],[1,1,2],[1,2,2]] 思路: 输出列表中的每一个子列表描述了某个哲学家的具体行为它的格式如下 output[i] [a, b, c] (3 个整数) a 哲学家编号。 b 指定叉子{1 : 左边, 2 : 右边}. c 指定行为{1 : 拿起, 2 : 放下, 3 : 吃面}。 如 [4,2,1] 表示 4 号哲学家拿起了右边的叉子。所有自列表组合起来就完整描述了“当每个哲学家分别需要进食 n 次”时这五位哲学家具体的行为记录。 代码实现 import queue import threading import time import random class CountDownLatch: def __init__(self, count): self.count count self.condition threading.Condition() def wait(self): try: self.condition.acquire() while self.count 0: self.condition.wait() finally: self.condition.release() def count_down(self): try: self.condition.acquire() self.count - 1 self.condition.notifyAll() finally: self.condition.release() class DiningPhilosophers(threading.Thread): def __init__(self, philosopher_number, left_fork, right_fork, operate_queue, count_latch): super().__init__() self.philosopher_number philosopher_number self.left_fork left_fork self.right_fork right_fork self.operate_queue operate_queue self.count_latch count_latch def eat(self): time.sleep(0.01) self.operate_queue.put([self.philosopher_number, 0, 3]) def think(self): time.sleep(random.random()) def pick_left_fork(self): self.operate_queue.put([self.philosopher_number, 1, 1]) def pick_right_fork(self): self.operate_queue.put([self.philosopher_number, 2, 1]) def put_left_fork(self): self.left_fork.release() self.operate_queue.put([self.philosopher_number, 1, 2]) def put_right_fork(self): self.right_fork.release() self.operate_queue.put([self.philosopher_number, 2, 2]) def run(self): while True: left self.left_fork.acquire(blockingFalse) right self.right_fork.acquire(blockingFalse) if left and right: self.pick_left_fork() self.pick_right_fork() self.eat() self.put_left_fork() self.put_right_fork() break elif left and not right: self.left_fork.release() elif right and not left: self.right_fork.release() else: time.sleep(0.01) print(str(self.philosopher_number) count_down) self.count_latch.count_down() if __name__ __main__: operate_queue queue.Queue() fork1 threading.Lock() fork2 threading.Lock() fork3 threading.Lock() fork4 threading.Lock() fork5 threading.Lock() n 1 latch CountDownLatch(5 * n) for _ in range(n): philosopher0 DiningPhilosophers(0, fork5, fork1, operate_queue, latch) philosopher0.start() philosopher1 DiningPhilosophers(1, fork1, fork2, operate_queue, latch) philosopher1.start() philosopher2 DiningPhilosophers(2, fork2, fork3, operate_queue, latch) philosopher2.start() philosopher3 DiningPhilosophers(3, fork3, fork4, operate_queue, latch) philosopher3.start() philosopher4 DiningPhilosophers(4, fork4, fork5, operate_queue, latch) philosopher4.start() latch.wait() queue_list [] for i in range(5 * 5 * n): queue_list.append(operate_queue.get()) print(queue_list) 总结 到此这篇关于Python实现哲学家就餐问题的文章就介绍到这了,更多相关Python哲学家就餐内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们 本文标题: Python实现哲学家就餐问题实例代码 本文地址: http://www.cppcns.com/jiaoben/python/362762.html
http://www.zqtcl.cn/news/155671/

相关文章:

  • 叮当快药网站谁做的网站开发遇到的最大困难
  • 一个域名可以建几个网站毕业设计可以做哪些简单网站
  • 知名商城网站建设报价wordpress 后台 logo
  • 单位网站建设框架yellow网站推广联盟
  • html5和php做网站做网站租用服务器
  • 网站开发中效率较高的编程语言公司域名注册流程
  • 万户网站管理系统4.0cms监控系统手机版下载
  • 宁波专业网站建设怎么做如何做一个虚拟网站
  • 网站栏目建设调研公司怎么建立一个网站
  • 苍溪建设局网站网站建设和维护采购协议
  • 代做网站微信号下载 wordpress插件
  • 泉州住房建设局网站wordpress输入html代码
  • 为什么访问外国网站速度慢沈阳网站公司排名
  • 网站建设+泰安网站项目建设策划方案
  • 微信人生里面微网站怎么做wordpress 第三方登录 代码
  • 做商城网站哪里高端大气网站案例
  • 网站做项目网站设计公司深
  • 学校做网站及费用建设网站有何要求
  • 河北邢台移动网站建设宁波网站开发公司电话
  • 免费建立个人网站申请seo搜索引擎优化推广
  • 如何拷贝服务器里面网站做备份金融网站怎么做的
  • 什么网站做的比较好网上投资网站建设
  • 公司网站运营方案策划办网站怎么赚钱
  • 贾汪区建设局网站设计接单兼职网站
  • 东莞商城网站建设哪家便宜wordpress 插件路径
  • 网站服务器 安全快递系统专注快递企业网站开发
  • 旅游网站平台建设的方案深圳移动官网网站建设
  • 如何建设企业人力资源网站网站建设和网络优化的区别
  • 辽宁网站设计影响网站用户体验
  • cms网站如何修改黄山建设网站