python多线程lock,
实用python并发编程(六):线程安全问题及锁解决方案_wx5de339d64c54e _博客的技术博客
线程安全概念介绍
锁用于解决线程安全问题。
解锁导致的重复扣款现在有取钱功能了。如果账户余额大于取钱金额,就会取钱,启动两个线程,同时取钱。可能余额不足,但也可以取钱。如果加上等待时间,这种现象是不可避免的,因为睡眠会阻塞线程,造成线程切换。
tmp/03.lock_concurrent.py
导入线程
导入时间
类别帐户:
def __init__(self,balance):
自我平衡=平衡
定义提取(账户,金额):
如果账户余额=金额:
#sleep会导致线程阻塞和线程切换,所以每次都会出现添加sleep。
时间.睡眠(0.1)
Print (threading.current _ thread()。名称,成功取款)
帐户.余额-=金额
Print (threading.current _ thread()。名称,余额,账户.余额)
否则:
Print (threading.current _ thread()。名称,取钱失败,余额不足)
if __name__==__main__ :
账户=账户(1000)
ta=线程。Thread(name=ta ,target=draw,args=(account,800))
tb=线程。Thread(name=tb ,target=draw,args=(account,800))
ta.start()
tb.start()
锁
为了演示串行和多线程锁的速度,简单修改代码,发现多线程锁更快。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。