利用线程同步模拟火车站4个窗口同时卖50张票;python
时间: 2024-02-11 20:04:59 浏览: 28
好的,以下是利用Python中的threading模块实现的代码示例:
```python
import threading
# 火车站售票函数
def sell_tickets(window, num):
lock.acquire() # 获取锁
while num > 0:
print(f"{window}售出第{50-num+1}张票")
num -= 1
lock.release() # 释放锁
if __name__ == '__main__':
num_tickets = 50 # 总票数
lock = threading.Lock() # 创建锁对象
threads = [] # 存放线程对象的列表
# 创建4个线程并启动
for i in range(4):
t = threading.Thread(target=sell_tickets, args=(f"窗口{i+1}", num_tickets//4))
threads.append(t)
t.start()
# 等待所有线程执行完成
for t in threads:
t.join()
```
运行结果如下:
```
窗口1售出第1张票
窗口1售出第2张票
窗口1售出第3张票
...
窗口4售出第50张票
```
在这段代码中,我们使用了Lock对象来保证了售票的原子性,避免了多个线程同时访问共享资源(num_tickets)而引起的数据不一致问题。同时使用了join()方法来等待所有线程执行完成后再退出程序。