千家信息网

python线程安全有哪些情况

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,这篇文章主要介绍python线程安全有哪些情况,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、可见性问题,CPU缓存引起的可见性问题,使线程一对共享变量A的操作无法立即被线程
千家信息网最后更新 2024年11月17日python线程安全有哪些情况

这篇文章主要介绍python线程安全有哪些情况,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1、可见性问题,CPU缓存引起的可见性问题,使线程一对共享变量A的操作无法立即被线程二看到,导致线程二获得旧值。

2、原子问题。

例如,self._balance=self._balance-draw_amount这个语句不是原子CPU执行命令。这个语句的执行有三个CPU命令。

实例

import threadingclass 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线程安全有哪些情况"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0