写一个程序,3个窗口售票名字分别是window1、window2、window3,窗口之间共享一个票池,每个窗口都可以卖票直到票池里面没有票可以卖,初始票数是50张。
时间: 2023-11-27 15:51:24 浏览: 72
以下是用Python实现的程序:
```python
import threading
ticket_pool = 50 # 初始票数
lock = threading.Lock() # 创建一个锁对象
class TicketSeller(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global ticket_pool
while True:
lock.acquire() # 加锁
if ticket_pool > 0: # 如果还有票可以卖
ticket_pool -= 1
print(self.name, "卖出了1张票,剩余票数:", ticket_pool)
else: # 如果票已经卖完了
lock.release() # 释放锁
print(self.name, "发现票已经卖完了,退出售票。")
break
lock.release() # 释放锁
# 创建3个售票窗口
window1 = TicketSeller("窗口1")
window2 = TicketSeller("窗口2")
window3 = TicketSeller("窗口3")
# 启动售票窗口线程
window1.start()
window2.start()
window3.start()
```
在程序中,我们创建了一个全局变量 `ticket_pool`,用来存储票池中的票数。然后创建了一个 `TicketSeller` 类,继承了 `threading.Thread` 类,用来表示售票窗口。在 `run` 方法中,我们使用了 `lock.acquire()` 和 `lock.release()` 来控制线程对 `ticket_pool` 变量的访问,保证了线程安全。
最后,我们创建了3个 `TicketSeller` 对象,分别代表3个售票窗口,并启动了它们的线程。当票池中的票数为0时,线程会自动退出。
阅读全文