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

10-2 HNCST - 多线程4 - 线程同步Condition——python

有一家店铺里有4个销售和2个搬运工,销售负责卖货,搬运工负责从仓库搬货物,已知该店铺的存货有size,当销售或搬运工做完所有商品数量后,他们各自就可以下班。销售可以同时卖货,但只能按照货架顺序每次卖出一件,搬运工一次可以搬满货架,货架容量为5个货物。当货架商品销售完后,搬运工会去仓库搬运货物进行补货,销售此时进行小憩;当货架补满后,销售开始销售商品,搬运工进行休息。

本题要求实现搬运工Porter类和销售Seller类,他们都是线程类。

提示:本题需要使用Condition类来保证销售不会乱卖商品,保证搬运工不会在商品未销售完时搬运货物。

裁判测试程序样例:

from threading import Thread, Condition# ***************# 你编写的类将放在这# ***************size = int(input())
Porter.size = Seller.size = size
condi = Condition()
shelves = []for _ in range(2):Porter().start()for _ in range(4):Seller().start()


 

输入样例:

在这里给出一组输入。例如:

20

输出样例:

在这里给出相应的输出。例如:

已生产商品: 1 2 3 4 5
已销售商品: 1
已销售商品: 2
已销售商品: 3
已销售商品: 4
已销售商品: 5
已生产商品: 1 2 3 4 5
已销售商品: 1
已销售商品: 2
已销售商品: 3
已销售商品: 4
已销售商品: 5
已生产商品: 1 2 3 4 5
已销售商品: 1
已销售商品: 2
已销售商品: 3
已销售商品: 4
已销售商品: 5
已生产商品: 1 2 3 4 5
已销售商品: 1
已销售商品: 2
已销售商品: 3
已销售商品: 4
已销售商品: 5
class Porter(Thread):def run(self):global shelvescondi.acquire()while Porter.size > 0:if len(shelves) >= 5:condi.notify()condi.wait()else:if len(shelves) <= 0:print("已生产商品:",end='')shelves.append(6)Porter.size -= 1if len(shelves) >=5 or Porter.size <= 0:print(f" {len(shelves)}")else:print(f" {len(shelves)}",end = '')condi.notify()condi.release()class Seller(Thread):def run(self):global shelves,tps,nwith condi:while len(shelves) > 0 or Seller.size > 0:if len(shelves) <= 0:condi.notify()condi.wait()else:del shelves[0]Seller.size -= 1if Seller.size == len(shelves) and n == 0:tps = len(shelves) + 1n = 1print(f"已销售商品: {tps - len(shelves)}",end = '')if Seller.size > 0:print()tps = 5
n = 0

 

相关文章:

  • 2023年,我在美国的这一年!
  • CSS Grid 和 Flexbox
  • kivy开发一个登陆界面
  • 12.30_黑马数据结构与算法笔记Java
  • Java:IO流——字节流和字符流
  • Qlib从入门到精通
  • 2022年全国职业院校技能大赛高职组云计算正式赛卷第三场-公有云
  • pytorch01:概念、张量操作、线性回归与逻辑回归
  • 【论文阅读】Realtime multi-person 2d pose estimation using part affinity fields
  • x-cmd-pkg | 音视频处理领域中常用的开源转换工具:ffmpeg
  • Kubernetes 学习总结(43)—— Kubernetes 从提交 deployment 到 pod 运行的全过程
  • SpringBoot 集成 Kafka消息中间件,Docker安装Kafka环境
  • Eureka相关面试题及答案
  • Jenkins 系列:Jenkins 安装(Windows、Mac、Centos)和简介
  • C++基础-文件读写操作详解
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【翻译】babel对TC39装饰器草案的实现
  • Asm.js的简单介绍
  • avalon2.2的VM生成过程
  • CSS居中完全指南——构建CSS居中决策树
  • Docker容器管理
  • exif信息对照
  • flutter的key在widget list的作用以及必要性
  • Hexo+码云+git快速搭建免费的静态Blog
  • spark本地环境的搭建到运行第一个spark程序
  • 阿里云应用高可用服务公测发布
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 跨域
  • 前嗅ForeSpider中数据浏览界面介绍
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 想写好前端,先练好内功
  • 正则表达式小结
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (四)鸿鹄云架构一服务注册中心
  • (转)【Hibernate总结系列】使用举例
  • (转)为C# Windows服务添加安装程序
  • ./configure,make,make install的作用(转)
  • .NET CORE Aws S3 使用
  • .net refrector
  • .NET 使用 XPath 来读写 XML 文件
  • .NET4.0并行计算技术基础(1)
  • .net6Api后台+uniapp导出Excel
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .sdf和.msp文件读取
  • @ModelAttribute注解使用
  • @SentinelResource详解
  • @Service注解让spring找到你的Service bean
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?