假定商洛市火车北站针对绿巨人开发需要开发一个多窗口、多平台的售票程序,请你根据线程的数据共享方法,编写程序实现3个窗口同时售票的多线程程序。
时间: 2024-02-20 08:57:24 浏览: 11
好的,以下是一个简单的多线程售票程序:
```python
import threading
class TicketSeller:
def __init__(self, tickets):
self.tickets = tickets # 总票数
self.lock = threading.Lock() # 创建锁,保证线程安全
def sell(self):
self.lock.acquire() # 获取锁
if self.tickets > 0:
print("售票员{}:售出第{}张票".format(threading.current_thread().name, self.tickets))
self.tickets -= 1
else:
print("售票员{}:票已售完".format(threading.current_thread().name))
self.lock.release() # 释放锁
def sell_tickets(seller, num):
for i in range(num):
seller.sell()
if __name__ == "__main__":
seller = TicketSeller(10) # 总票数为10
t1 = threading.Thread(target=sell_tickets, args=(seller, 3), name="窗口1")
t2 = threading.Thread(target=sell_tickets, args=(seller, 4), name="窗口2")
t3 = threading.Thread(target=sell_tickets, args=(seller, 3), name="窗口3")
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
```
程序中,我们首先定义了一个 `TicketSeller` 类,表示售票员。这个类有一个 `tickets` 属性,表示剩余的票数。为了保证线程安全,我们使用了一个锁,通过 `acquire` 和 `release` 方法来获取和释放锁。
然后我们定义了一个 `sell_tickets` 函数,表示售票的过程。这个函数接收两个参数,一个是售票员对象,一个是要售出的票数。在函数中,我们使用一个 for 循环,调用 `seller.sell()` 方法来售出票。
在主程序中,我们创建了一个 `TicketSeller` 对象,总票数为10。然后我们创建了三个线程,分别代表三个售票窗口。每个线程调用 `sell_tickets` 函数,售出一定数量的票。最后我们使用 `join` 方法来等待所有线程执行完毕。
这样就实现了一个简单的多线程售票程序,可以在多窗口、多平台上运行。