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()
本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。
苹果芯片加持下PyTorch如何利用GPU和NPU?
NumPy保存和加载数据时如何处理None值?
遇到Python读取Excel测试用例时出现“list index out of range”错误,可以按照以下步骤解决:检查Excel文件内容:确保Excel文件中的数据完整且格式正确。错误常见于尝试访问不存在的列表索引,因此确认每一行都有足够的数据。查看代码逻辑:检查读取Excel文件的代码,特别是涉及到列表索引的部分。确保你访问的索引在列表的有效范围内。例如,如果列表长度为5,索引只能从0到4。调试代码:在可能出错的地方添加打印语句或使用调试器,查看变量的值和列表的长度,确保你在正确的位置访问正确的
微信扫码后小窗口变空白?解决方法在这里!
TCP端口占用:服务端程序退出后,端口为何依然被占用且如何解决?
初学者 Python 项目:使用 OpenCV 和 Mediapipe 构建增强现实绘图应用程序