python线程安全有哪些情况

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

网页标题:python线程安全有哪些情况
URL链接:https://www.cdcxhl.com/article2/ghshic.html

成都网站建设公司_创新互联,为您提供云服务器网站制作定制网站微信小程序网站维护用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站网页设计