Spring aware接口的作用是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~