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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的客户关系管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的客户管理系统,java项目…

[JS设计模式]Prototype Pattern

Prototype pattern Prototype pattern可便于同类型的多个对象共享属性。原型&#xff08;prototype&#xff09;是JS原生的对象&#xff0c;其他对象可以通过原型链&#xff08;prototype chain&#xff09;来访问原型。单独看这句描述可能还是有点儿抽象&#xff0c;下面通过…

深度解析ShardingJDBC:Java开发者的分库分表利器

一、ShardingSphere ShardingSphere 是一款起源于当当网内部的应用框架。2015年在当当网内部诞 生&#xff0c;最初就叫ShardingJDBC 。2016年的时候&#xff0c;由其中一个主要的开发人员张亮&#xff0c; 带入到京东数科&#xff0c;组件团队继续开发。在国内历经了当当网、电…

Unity 新版 Meta XR SDK 无法导入解决方法

文章目录 &#x1f4d5;教程说明&#x1f4d5;新版 SDK 说明&#x1f4d5;从 Meta 官网导入开发包⭐依赖包⭐如何导入⭐导入后包存放在哪里了&#xff1f;⭐场景样例文件去哪了&#xff1f; 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatia…

报表控件FastReport VCL 中的新 S3 传输 (Amazon)

在本文中&#xff0c;我们将探讨新的 S3 传输。从功能上来说&#xff0c;S3 与大多数人习惯使用的有很大不同&#xff0c;因此在本文的开头&#xff0c;我们将详细介绍它的主要功能。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体的全…

软件测试/测试开发丨Python内置库学习笔记

内置库 一、内置库OS 1、os概述 os: Operating Systemos 模块的常用功能跨平台的差异 2、os使用 导入 os 模块查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))3、os 常用方法 &#xff08;1&…

全渠道客服系统推荐:选型指南与最佳实践分享

售后服务是影响客户满意度的最直接的因素。有些企业不注重产品的售后服务&#xff0c;不仅是对客户的伤害&#xff0c;更是对企业品牌的损害。所以&#xff0c;做好售后服务对于企业来讲至关重要。 企业谈到做好售后服务&#xff0c;少不了一款好用的客服系统工具。其中&#…

C# PrinterSettings修改打印机纸张类型,paperType

需求&#xff1a;直接上图&#xff0c;PrinterSettings只能改变纸张大小&#xff0c;打印质量&#xff0c;无法更改打印纸类型 爱普生打印机打印照片已经设置了最高质量&#xff0c;打印图片仍不清晰&#xff0c;需要修改打印纸类型&#xff0c;使用PrintDialog调出对话框&…

集合高级面试题

1. ArrayList 和 Vector 的区别&#xff1f; 参考答案 这两个类都实现了 List 接口&#xff08;List 接口继承了 Collection 接口&#xff09;&#xff0c;他们都是有序集合&#xff0c;即存储在这两个集合中的元素的位置都是有顺序的&#xff0c;相当于一种动态的数组&#x…

js获取某天日期

获取某天日期 getSomeDay(someDay) {let currentDate new Date();let targetday_milliseconds currentDate.getTime() 1000 * 60 * 60 * 24 * someDay;currentDate.setTime(targetday_milliseconds);const doHandleMonth (month) > {let m month;if (month.toString()…

2023-12-30 AIGC-LangChain介绍

摘要: 2023-12-30 AIGC-LangChain介绍 LangChain介绍 1. https://youtu.be/Ix9WIZpArm0?t353 2. https://www.freecodecamp.org/news/langchain-how-to-create-custom-knowledge-chatbots/ 3. https://www.pinecone.io/learn/langchain-conversational-memory/ 4. https://de…

SQL高级:存储过程和触发器

在前面的内容中,我们学习了视图的概念和使用,视图实际上代表了一种自定义的结果集,可以理解为一个虚拟表。它诠释了部分数据的逻辑关系,但并不会操作数据。 如果有一些需求可以通过多个DML SQL组合起来完成,我们就可以使用存储过程。存储过程可以类比其他编程语言中的方法…

乒乓球室计时计费软件,乒乓球馆怎么计时

一&#xff0c;软件程序问答 1、软件有计时功能吗&#xff0c;有会员管理功能吗&#xff1f; 如下图&#xff0c;软件以 佳易王乒乓球馆计时计费软件 为例说明 软件既可以既可以计时计费&#xff0c;也可以会员管理&#xff0c;会员可以用卡片也可以直接用手机号即可。 2、软…

2023年度总结——关于如何认清自己是个FW

前言 不到各位有没有今年过得特别快的感觉。写总结时候一整理&#xff0c;我敲&#xff0c;我今年这么忙&#xff1f; 从三月份开说 三月份 这段时间刚开学&#xff0c;还算比较懵懂。不过初生牛犊不怕虎&#xff0c;那个寒假学了点怎么挖edusrc&#xff0c;开学迫不及待地…

SpireCV项目实战——电诈园区人员及房屋情况识别

项目介绍前言 随着科技的进步和大数据时代的到来&#xff0c;计算机视觉技术逐渐渗透到各个行业领域&#xff0c;为人们的生活和工作带来了诸多便利。近年来&#xff0c;电信诈骗案件频发&#xff0c;给社会带来了巨大的经济损失和心理负担。电诈园区作为电信诈骗的高发区域&a…

弱电工程计算机网络系统基础知识

我们周围无时无刻不存在一张网&#xff0c;如电话网、电报网、电视网、计算机网络等&#xff1b;即使我们身体内部也存在许许多多的网络系统&#xff0c;如神经系统、消化系统等。最为典型的代表即计算机网络&#xff0c;它是计算机技术与通信技术两个领域的结合。 计算机网络的…

【QT】qt各模块描述

【未完待续】 QT主要版本&#xff0c;各个模块的作用描述。 QT5.12 版本(只有部分) qtgamepad: 提供了对游戏手柄的支持。qtandroidextras: 提供了一些特定于Android的功能。qtmacextras: 提供了一些特定于macOS的功能。qtx11extras: 提供了一些特定于X11的功能。qtsensors:…

spring ioc源码-refresh();

主要作用是刷新应用上下文 Override public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// 启动刷新的性能跟踪步骤StartupStep contextRefresh this.applicationStartup.start("spring.context.refre…

Typescript面向对象

面向对象 面向对象是程序中一个非常重要的思想&#xff0c;它被很多同学理解成了一个比较难&#xff0c;比较深奥的问题&#xff0c;其实不然。面向对象很简单&#xff0c;简而言之就是程序之中所有的操作都需要通过对象来完成。 举例来说&#xff1a; 操作浏览器要使用windo…

Windows 10启用Hyper-V

Windows 10启用Hyper-V 官网教程PowerShell 启用 Hyper-V启用 Hyper-V 角色 我们知道VMware是创建虚拟机的好工具&#xff0c;那Windows平台上有没有虚拟工具呢&#xff1f; 今天我们要讲解的就是Windows才入局的虚拟工具&#xff1a;Hyper-V 官网教程 https://learn.microsof…