python 用condition控制五个线程存钱,五个线程取钱
时间: 2023-11-28 17:57:51 浏览: 56
好的,这是一个典型的多线程并发问题。下面是一个基于Python的实现,使用线程的wait()和notify()方法来控制存款和取款的交替进行。
```python
import threading
# 初始化账户余额
balance = 0
# 初始化条件变量condition
condition = threading.Condition()
# 存款线程
def deposit_money():
global balance
# 获取condition对象的锁
condition.acquire()
for i in range(5):
# 存款金额
deposit_amount = 100
balance += deposit_amount
# 打印存款操作后的账户余额
print(f"存款后,账户余额为{balance}")
# 通知取款线程可以进行取款操作
condition.notify_all()
# 如果还有存款操作,等待下一个存款操作
if i < 4:
condition.wait()
# 释放condition对象的锁
condition.release()
# 取款线程
def withdraw_money():
global balance
# 获取condition对象的锁
condition.acquire()
for i in range(5):
# 取款金额
withdraw_amount = 80
# 如果账户余额不足,等待存款操作
while balance < withdraw_amount:
condition.wait()
balance -= withdraw_amount
# 打印取款操作后的账户余额
print(f"取款后,账户余额为{balance}")
# 通知存款线程可以进行存款操作
condition.notify_all()
# 释放condition对象的锁
condition.release()
# 创建并启动五个存款线程和五个取款线程
for i in range(5):
threading.Thread(target=deposit_money).start()
threading.Thread(target=withdraw_money).start()
```
在这个示例中,我们使用了一个全局变量`balance`来表示账户余额,使用`Condition`对象来控制存款和取款的交替进行。五个存款线程和五个取款线程共同访问这个全局变量和`Condition`对象,通过`wait()`和`notify_all()`方法的配合,实现了存款和取款的有序进行。
阅读全文