list线程安全的(python线程安全的两种情况)
导读:1、可见性问题,CPU缓存引起的可见性问题,使线程一对共享变量A的操作无法立即被线程二看到,导致线程二获得旧值。...
1 、可见性问题 ,CPU缓存引起的可见性问题 ,使线程一对共享变量A的操作无法立即被线程二看到 ,导致线程二获得旧值 。
2 、原子问题 。
例如 ,self._balance=self._balance-draw_amount这个语句不是原子CPU执行命令 。这个语句的执行有三个CPU命令 。
实例
importthreading classAccount: #定义构造函数 def__init__(self,account_no,balance): """ :paramaccount_no:账户 :parambalance:余额 """ self.account_no=account_no self._balance=balance defdraw(self,draw_amount): """ :paramdraw_amount:需要取的钱 :return: """ ifself._balance>draw_amount: print(threading.current_thread().getName()+从+self.account_no+"取钱成功 ,账户取出金额是:"+str( draw_amount)+"\n") self._balance=self._balance-draw_amount print(账户余额是,self._balance) else: print(threading.current_thread().getName()+从+self.account_no+"取钱失败\n") #两个线程并发取钱 account=Account(账户一,2000) threading.Thread(target=account.draw,name=线程一,args=(800,)).start() threading.Thread(target=account.draw,name=线程二,args=(800,)).start() threading.Thread(target=account.draw,name=线程三,args=(800,)).start()以上就是python线程安全的两种情况 ,希望对大家有所帮助 。更多Python学习指路:Python基础教程
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!