知行编程网知行编程网  2022-12-30 10:30 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python线程安全的两种情况的相关知识,包括python -m,以及python多线程编程这些编程知识,希望对大家有参考作用。

python线程安全的两个案例

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


2、原子问题。

例如,语句 self._balance=self._balance-draw_amount 不是原子 CPU 执行命令。该语句的执行有 3 个 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()


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

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享