python并发编程实战(六):线程安全问题以及Lock解决方案(python多线程lock)

网友投稿 317 2022-08-26


python并发编程实战(六):线程安全问题以及Lock解决方案(python多线程lock)

线程安全概念介绍

Lock用于解决线程安全问题

未加锁导致重复扣款

现在有一个取钱的功能,如果账户余额大于取钱数量的时候,就会进行取钱操作,启动2个线程,并发的去取钱,可能会出现余额不足,但也能进行取钱的操作,如果加了等待时间,这个现象是必现的,因为sleep会造成线程的阻塞,导致线程的切换 tmp/03.lock_concurrent.py

import threadingimport timeclass Account: def __init__(self, balance): self.balance = balancedef draw(account, amount): if account.balance >= amount: #sleep会导致线程的阻塞,导致线程的切换,因此加了sleep每次都会出现 time.sleep(0.1) print(threading.current_thread().name, "取钱成功") account.balance -= amount 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()

加锁

串行


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Quarkus的Spring扩展快速改造Spring项目
下一篇:python中sorted()函数的用法(python sorted函数用法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~