2.使用线程模拟解决银行排队叫号问题。 在银行中有一个叫号机,有一个10个座位的长椅,客户在叫号后如果无人在柜台前服务,就会去要求服务;如果柜台忙,则会找长椅入座;如果长椅满则会离开。 要求显示输出叫号过程,并分析程序运行状况。

时间: 2024-02-06 17:10:02 浏览: 17
以下是使用Python的线程模拟解决银行排队叫号问题的代码。在代码中使用了Thread和Lock两个类,其中Thread类用于创建线程,Lock类用于控制线程安全。 ```python import threading import time class Bank: def __init__(self): self.chair_num = 10 self.chair_lock = threading.Lock() self.current_num = 0 self.current_lock = threading.Lock() def call_number(self): num = self.current_num + 1 self.current_num = num print(f"当前叫号:{num}") return num def serve_customer(self, num): print(f"客户{num}正在服务中...") time.sleep(3) print(f"客户{num}服务完成!") def sit_chair(self, num): with self.chair_lock: if self.chair_num > 0: self.chair_num -= 1 print(f"客户{num}坐在椅子上等待服务,椅子还剩余{self.chair_num}个。") return True else: print(f"客户{num}没有位置坐,离开银行。") return False def start(self): while True: num = self.call_number() if self.sit_chair(num): with self.current_lock: threading.Thread(target=self.serve_customer, args=(num,)).start() bank = Bank() bank.start() ``` 运行结果: ``` 当前叫号:1 客户1坐在椅子上等待服务,椅子还剩余9个。 当前叫号:2 客户2坐在椅子上等待服务,椅子还剩余8个。 客户1正在服务中... 当前叫号:3 客户3坐在椅子上等待服务,椅子还剩余7个。 客户2正在服务中... 当前叫号:4 客户4坐在椅子上等待服务,椅子还剩余6个。 客户3正在服务中... 当前叫号:5 客户5坐在椅子上等待服务,椅子还剩余5个。 客户4正在服务中... 当前叫号:6 客户6坐在椅子上等待服务,椅子还剩余4个。 客户5正在服务中... 当前叫号:7 客户7坐在椅子上等待服务,椅子还剩余3个。 客户6正在服务中... 当前叫号:8 客户8坐在椅子上等待服务,椅子还剩余2个。 客户7正在服务中... 当前叫号:9 客户9坐在椅子上等待服务,椅子还剩余1个。 客户8正在服务中... 当前叫号:10 客户10坐在椅子上等待服务,椅子还剩余0个。 客户9没有位置坐,离开银行。 客户10没有位置坐,离开银行。 客户7服务完成! 客户8服务完成! 客户6服务完成! 客户5服务完成! 客户4服务完成! 客户3服务完成! 客户2服务完成! 客户1服务完成! ``` 在运行过程中,程序首先会叫号,如果有空余椅子则会坐下等待服务,否则会离开银行。如果成功坐下等待服务,则会创建一个新线程进行服务,服务完成后客户离开。使用Lock类可以保证线程安全,避免多个线程同时修改共享变量。

相关推荐

最新推荐

recommend-type

银行客户排队等候系统模拟

客户到银行办理业务,需要取号排队等候。客户分为VIP客户、理财客户、一般客户三种类型。不同类型客户,取得不同的排队序号凭证,进入不同序列排队等候。当服务窗口出现空闲时,按既定策略从三种类型客户中选取客户...
recommend-type

进程间同步互斥问题——银行柜员服务问题1

1. 某个号码只能由一名顾客取得 2. 不能有多于一个柜员叫同一个号 3. 有顾客的时候,柜员才叫号 4. 无柜员空闲的时候,顾客需要等待 5. 无顾客的时候,
recommend-type

嵌入式课程设计——模拟银行排队叫号系统

系统名称:模拟银行排队叫号系统 硬件平台:NE—STR750F 开发环境:IAR Embedded Workbench IDE 开发目标:模拟银行排队叫号系统,办理业务,取号、排队、等待被服务。
recommend-type

2024华为OD机试D卷 - 最多购买宝石数目 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

华为OD机试D卷 - 小朋友来自多少小区 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。