编写一个利用线程互斥锁解决线程互斥的程序。要求父进程创建两个子线程,父进程和两个子线程模拟3个售票窗口进行售卖15张从青城山到犀浦的火车票,直到售完为止。假设1个窗口售卖1张火车票的时间为1秒
时间: 2024-05-07 14:19:53 浏览: 88
线程互斥锁
下面是一个利用线程互斥锁解决线程互斥的程序:
```python
import threading
# 初始化火车票数量为15张
ticket_count = 15
# 创建互斥锁
mutex = threading.Lock()
# 售票函数
def sell_ticket(thread_name):
global ticket_count # 使用全局变量
while True:
# 上锁
mutex.acquire()
if ticket_count > 0:
ticket_count -= 1
print(thread_name, "售出一张票,剩余票数为", ticket_count)
else:
print(thread_name, "售完了所有票")
# 释放锁
mutex.release()
break
# 释放锁
mutex.release()
# 创建两个子线程
thread1 = threading.Thread(target=sell_ticket, args=("窗口1",))
thread2 = threading.Thread(target=sell_ticket, args=("窗口2",))
# 开始售票
thread1.start()
thread2.start()
# 等待子线程结束
thread1.join()
thread2.join()
# 所有票已售完
print("所有票已售完")
```
上述程序中,我们使用了 Python 中的 `threading` 模块来创建线程,使用全局变量 `ticket_count` 来记录剩余车票数量,并且使用互斥锁来保证每次只有一个线程可以访问修改 `ticket_count` ,从而避免了多个线程同时访问修改 `ticket_count` 导致数据不一致的问题。
阅读全文