假设售票厅有1000张火车票,它同时开启两个窗口(视为线程)卖票,每卖出一张火车票显示当前的剩余票数。请按照以上题目为我写一个python互斥锁
时间: 2024-11-09 17:26:45 浏览: 14
在这个场景中,我们可以使用Python的内置模块`threading`中的`Lock`来实现两个窗口对火车票数量的共享访问,并保证数据的一致性和完整性。下面是一个简单的示例:
```python
import threading
class TicketCounter:
def __init__(self, total_tickets):
self.total_tickets = total_tickets
self.lock = threading.Lock() # 使用互斥锁
self.current_tickets = total_tickets
def sell_ticket(self):
with self.lock: # 锁定操作,确保并发安全
if self.current_tickets > 0:
self.current_tickets -= 1
print(f"当前剩余票数: {self.current_tickets}")
else:
print("票已售罄")
# 初始化票务系统
counter = TicketCounter(1000)
# 创建两个线程分别从两个窗口卖票
window_1 = threading.Thread(target=counter.sell_ticket)
window_2 = threading.Thread(target=counter.sell_ticket)
# 启动线程
window_1.start()
window_2.start()
# 等待线程结束
window_1.join()
window_2.join()
```
在这个例子中,我们创建了一个`TicketCounter`类,其中包含一个计数器和一个互斥锁。当线程试图卖票时,会先获取锁,然后检查是否有足够的票,如果有,则减去并更新剩余票数,最后释放锁。如果没有票了,就直接打印出提示。
阅读全文