实验任务:设计一个火车售票模拟程序,假如火车站有一百张火车票要售出,现在有五个售票点同时售票,用五个线程模拟这五个售票点的售票情况实验要求:要求打印出每个售票点所卖出的票号 各售票点不能售出相同票号的火车票
时间: 2024-05-03 16:18:37 浏览: 89
好的,这是一个比较典型的多线程编程任务,需要使用线程同步机制来确保售票的正确性。下面是一个可能的解决方案:
```python
import threading
# 定义全局变量,表示可售票号
ticket_num = 100
# 创建互斥锁对象
mutex = threading.Lock()
# 定义售票线程类
class TicketThread(threading.Thread):
def __init__(self, name):
super().__init__(name=name)
def run(self):
global ticket_num, mutex
while True:
# 加锁
mutex.acquire()
if ticket_num > 0:
# 模拟售票过程
print(f"{self.name} sold ticket {ticket_num}")
ticket_num -= 1
else:
# 所有票已售完,退出
mutex.release()
break
# 释放锁
mutex.release()
# 创建五个售票线程并启动
threads = [TicketThread(f"Thread-{i}") for i in range(5)]
for thread in threads:
thread.start()
# 等待所有线程结束
for thread in threads:
thread.join()
```
这段代码中,我们使用了一个全局变量 `ticket_num` 来表示可售票号,同时使用了一个互斥锁对象来保证售票过程的线程安全性。在每个售票线程的 `run()` 方法中,首先加锁,然后判断是否还有票可售,如果有,则售出一张票并打印出售票信息;否则,释放锁并退出循环。最后,在主线程中等待所有售票线程结束。
需要注意的是,互斥锁的使用是为了保证售票过程的线程安全性,如果不加锁可能会出现多个线程同时售出同一张票的错误。
阅读全文