多线程程序模拟以下情况: 有2个用户分别从一个卡上取钱总额:3000,每次都取200块钱,当余额不足时,不能再取钱,不能出现超取现象
时间: 2024-05-14 14:18:33 浏览: 12
可以使用线程锁来实现这个模拟过程。具体实现如下:
```python
import threading
balance = 3000 # 初始余额为3000元
lock = threading.Lock() # 创建线程锁
# 定义取钱函数
def withdraw(name):
global balance # 使用全局变量balance
while True:
lock.acquire() # 获取线程锁
if balance >= 200: # 当余额足够时,可以继续取钱
balance -= 200 # 取200元钱
print(name + "取出200元,余额为:" + str(balance) + "元")
else: # 当余额不足时,不能再取钱
print(name + "余额不足,无法取钱")
break
lock.release() # 释放线程锁
# 创建两个线程分别代表两个用户
thread1 = threading.Thread(target=withdraw, args=("User1",))
thread2 = threading.Thread(target=withdraw, args=("User2",))
# 启动两个线程
thread1.start()
thread2.start()
# 等待两个线程结束
thread1.join()
thread2.join()
print("取钱结束,余额为:" + str(balance) + "元")
```
以上代码中,首先定义了一个全局变量balance表示卡上的余额,然后创建了一个线程锁lock。在取钱函数withdraw中,使用while循环不断尝试取钱,当余额足够时,使用lock.acquire()获取线程锁,执行取钱操作,然后使用lock.release()释放线程锁。当余额不足时,直接退出循环,结束取钱过程。最后,创建两个线程分别代表两个用户,启动线程,并等待两个线程结束。取钱结束后,输出余额信息。