您现在的位置是:课程教程文章

python线程安全的两种情况

2023-12-13 23:28课程教程文章 人已围观

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基础教程

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

课程教程:python线程安全的两种情况

上一篇:python线程通信Condition提供的方法

下一篇:没有了

站点信息

  • 文章统计篇文章