线程锁
import threading
import time
lock = threading.Lock()
class Account:
def __init__(self, balance):
# balance:余额
self.balance = balance
def draw(account, amout):
# 可以避免取钱数目大于余额
with lock:
if account.balance >= amout:
# 可以一直复现bug
time.sleep(0.1) # 导致当前线程的阻塞,进行线程的切换
print(threading.current_thread().name, "取钱成功")
account.balance -= amout
print(threading.current_thread().name, "余额", account.balance)
else:
print(threading.current_thread().name, "取钱失败,余额不足")
if __name__ == '__main__':
account = Account(1000)
ta = threading.Thread(name="ta", target=draw, args=(account, 800))
tb = threading.Thread(name="tb", target=draw, args=(account, 800))
ta.start()
tb.start()