这篇文章主要介绍python线程安全有哪些情况,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联是专业的太平网站建设公司,太平接单;提供做网站、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行太平网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
1、可见性问题,CPU缓存引起的可见性问题,使线程一对共享变量A的操作无法立即被线程二看到,导致线程二获得旧值。
2、原子问题。
例如,self._balance=self._balance-draw_amount这个语句不是原子CPU执行命令。这个语句的执行有三个CPU命令。
实例
import threading class Account: # 定义构造函数 def __init__(self, account_no, balance): """ :param account_no: 账户 :param balance: 余额 """ self.account_no = account_no self._balance = balance def draw(self, draw_amount): """ :param draw_amount: 需要取的钱 :return: """ if self._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线程安全有哪些情况”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款