1.安全概念介绍

image.png

2. Lock用于解决线程安全

image.png

代码实现

  1. import threading
  2. import time
  3. class Account:
  4. def __init__(self,balance):
  5. self.balance = balance
  6. lock = threading.Lock()
  7. def draw(account,amount):
  8. with lock:
  9. if account.balance > amount:
  10. time.sleep(0.1)# 存在耗时任务时就会有线程切换
  11. print(threading.current_thread().name,'取钱成功')
  12. account.balance -= amount
  13. print(threading.current_thread().name, '余额',account.balance)
  14. else:
  15. print(threading.current_thread().name,'余额不足')
  16. if __name__ == '__main__':
  17. account = Account(1000)
  18. t1 = threading.Thread(name='t1',target=draw,args=(account,800))
  19. t2 = threading.Thread(name='t2', target=draw, args=(account, 800))
  20. t1.start()
  21. t2.start()
  22. t1.join()
  23. t2.join()