假定商洛市火车北站针对绿巨人开发需要开发一个多窗口、多平台的售票程序,请你根据线程的数据共享方法,编写程序实现3个窗口同时售票的多线程程序。
时间: 2024-02-01 07:17:03 浏览: 45
以下是一个简单的多线程售票程序的示例,使用了线程锁来保证数据共享的线程安全:
```python
import threading
class TicketSeller:
def __init__(self, ticket_num):
self.ticket_num = ticket_num
self.lock = threading.Lock()
def sell_tickets(self, window_id):
while True:
self.lock.acquire()
if self.ticket_num > 0:
print(f"窗口{window_id}售出了1张票,剩余票数为{self.ticket_num - 1}")
self.ticket_num -= 1
self.lock.release()
else:
self.lock.release()
break
if __name__ == '__main__':
ticket_seller = TicketSeller(100)
threads = []
for i in range(3):
thread = threading.Thread(target=ticket_seller.sell_tickets, args=(i+1,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
```
在上面的代码中,我们首先定义了一个 `TicketSeller` 类,它的构造函数中接收一个参数 `ticket_num` 表示总票数,以及一个锁对象 `lock` 用于实现线程同步。
`sell_tickets` 方法则表示售票过程,它使用了一个死循环不断地尝试售票直到票已售完。在售票过程中,我们使用了 `self.lock.acquire()` 和 `self.lock.release()` 方法来获取和释放锁对象,确保了线程安全。
在主程序中,我们创建了三个线程,分别代表三个窗口,然后分别启动这三个线程。最后等待所有线程执行完毕,程序结束。
阅读全文