导语:
本文主要介绍了关于python线程安全的两种情况的相关知识,包括python -m,以及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电脑。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python生成器切片的实现10/09
- ♥ python如何解析网页数据01/04
- ♥ Python模块导入介绍12/25
- ♥ 不用第三方库也可以用Python画图,效果还不错11/05
- ♥ python os系统模块使用方法10/01
- ♥ Python assert 断言函数及用法11/11
内容反馈