volatile为什么无法保证原子性

news2024/11/19 20:44:10

假设定义 volatile int i =0;

现在2个线程同时 i++,为什么数据还可能会出错?一起来看下图,虽然volatile的机制是:如果volatile修饰的变量有修改,那么会将变更内容写回主内存,同时让其他线程工作内存的该变量缓存过期。但是这对原子性有什么用吗?请看下图的volatile的回写流程,这个流程就能看明白为啥不能保证原子性了。

当线程1执行了i++,目前i=1了,如果再通知线程2,让其工作内存的缓存过期有用吗?没用啊,因为线程2也早就计算出来了i=1,也准备写回内存里,线程2写回主内存的也是1。这个问题的关键点在于:线程1、2同时加载了i=0,然后同时完成了运算i++,计算出i=1,然后这个往回写的过程,和原子性无关。

那这计算了2次i++,最后主内存=1,数据肯定有问题的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1088776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5、使用 pgAdmin4 图形化创建和连接 PostgreSQL 数据库

通过上几篇文章我们讲解了如何安装 PostgreSQL 数据库软件和 pgAdmin4 图形化管理工具。 接下来几篇文章我们将继续学习如何通过 pgAdmin4 管理工具图形化创建和连接 PostgreSQL 数据库。 今天这篇文章首先让我们来了解下什么数据库和数据库管理系统,对数据库和数…

nnunetv2训练报错 ValueError: mmap length is greater than file size

目录 报错解决办法 报错 笔者在使用 nnunetv2 进行 KiTS19肾脏肿瘤分割实验的训练步骤中 使用 2d 和3d_lowres 训练都没有问题 nnUNetv2_train 40 2d 0nnUNetv2_train 40 3d_lowres 0但是使用 3d_cascade_fullres 和 3d_fullres 训练 nnUNetv2_train 40 3d_cascade_fullres …

【C语言】atoi函数的模拟

atoi对于初学者来说大概率是一个陌生的函数 但不要害怕,我们可以通过各种网站去查询 例如: cplusplus就是一个很好的查询网站 目录 函数介绍模拟实现需要注意的点 函数介绍 我们发现这是一个将字符串转换为整形数字的函数 例如: int main()…

由论文写作到知识教育传承,智者善用,扶AIGC踏新程!

在学术领域中,诚信是不可动摇的基石。但是,令人震惊的事件发生了,竟有学术论文作者将ChatGPT上操作按钮的短语「Regenerate Response」毫无保留地援引到自己的论文中,更令人惊讶的是,审稿编辑竟然未能察觉这一事实&…

ESP32网络开发实例-从LittleFS加载Web页面文件

从LittleFS加载Web页面文件 文章目录 从LittleFS加载Web页面文件1、应用介绍2、软件准备3、硬件准备4、Web页面代码与LittleFS文件系统上传4.1 Web页面代码实现4.2 Web页面代码上传5、Web服务器代码实现在文中,将展示如何构建一个 Web 服务器,为存储在 ESP32 的LittleFS文件系…

大数据NoSQL数据库HBase集群部署

目录 1. 简介 2. 安装 1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件 4. 【node1执行】&#xf…

怎么修改linux的root@后面的名称

文章目录 场景.登录服务器,root后面的名称是随机的,想自定义名称建议,直接使用命令执行需要重启机子 场景.登录服务器,root后面的名称是随机的,想自定义名称 建议,直接使用命令执行 hostnamectl set-hostname rdd-test重新连接即可生效,实际也是修改了/etc/hostname名称 需要…

高校教务系统密码加密逻辑及JS逆向——山东女子学院,蚌埠医学院,郑州工商学院,新疆大学,河南机电职业学院

高校教务系统密码加密逻辑及JS逆向 本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。 本文仅供交流学习,勿用于非法用途。 一、密码加…

2023年中国水电行业研究报告

第一章 行业概况 1.1 定义 水电行业是能源领域中的重要组成部分,它通过利用水资源来产生电能。这个行业的核心是通过构建水电站,利用水的势能和动能来驱动涡轮机,进而产生电力。水电技术是一种清洁、可再生的能源产生方式,对于降…

FREAK: Fast Retina Keypoint全文翻译

英文论文和翻译链接:https://pan.baidu.com/s/1HKHH5bFopQBX3EslVsICPg 提取码:yyds FREAK: Fast Retina Keypoint FREAK:快速视网膜关键点 摘要 大量的视觉应用程序依赖于匹配图像中的关键点。过去十年的特点是朝着更快、更鲁棒的关键点和关联算法的军…

C++:模板的相关内容

文章目录 泛型编程函数模板类模板非类型模板参数模板的特化 本篇介绍一部分关于C中模板使用的问题,模板是C的一大特色,需要在实际运用中体会它的妙处 泛型编程 为了知道什么是泛型编程,先来看,如何实现对于所有类型都使用的交换…

基于统计学库statsmodel实现时间序列预测

文章目录 1.数据探索与清洗2.假设检验:平稳性检验3.差分处理4.绘制ACF与PACF图像,完成模型选择4.建立ARIMA和SARIMA模型5.解读summary6.确定最终的模型 ARIMA模型在统计学上的三大基本假设: 时间序列具有平稳性(stationary&#x…

【Bug处理】E0265 函数 “SizeClass::RoundUp“ (已声明 所在行数:62)不可访问

错误描述: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0265 函数 “SizeClass::RoundUp” (已声明 所在行数:62,所属文件:“D:\CSTUDY\项目\高并发内存池\CONCURRENT_MEMORY_POOL\Common.h”) 不可访问 Concurrent_Memory_Pool D:\CStudy\…

10分钟搞懂,Python接口自动化测试-接口依赖-实战教程

一、场景说明 在面试接口自动化时,经常会问,其他接口调用的前提条件是当前用户必须是登录状态,如何处理接口依赖? 在此之前我们介绍过session管理器保存会话状态。如果接口请求需要携带token,那么又如果处理呢&#…

线性回归模型进行特征重要性分析

目的 线性回归是很常用的模型;在局部可解释性上也经常用到。 数据归一化 归一化通常是为了确保不同特征之间的数值范围差异不会对线性模型的训练产生过大的影响。在某些情况下,特征归一化可以提高模型的性能,但并不是所有情况下都需要进行归一…

点燃市场热情,让产品风靡全球——实用推广策略大揭秘!

文章目录 一、实用推广策略的重要性1. 提高产品知名度和认可度2. 拓展产品市场和用户群体3. 增强企业品牌形象和市场竞争力 二、实用推广策略的种类1. 社交媒体推广2. 定向推广3. 口碑营销4. 内容推广 三、实用推广策略的实施步骤1. 研究目标用户和市场需求,明确产品…

从开发到测试再到发布,全方位解析项目上线的完美路程!

文章目录 开发技术经理工作经验产品需求讨论项目开发计划制定控制项目风险技术小组日常管理工作进度检验与管理任务分配Code审查指导、培训普通开发工程师审核开发工程师的设计与研发质量 分布式项目架构经验1.技术架构2.网络架构3.数据库设计4.自动化部署5.监控和日志6.性能评…

【动态规划】123. 买卖股票的最佳时机 III、188. 买卖股票的最佳时机 IV

提示:努力生活,开心、快乐的一天 文章目录 123. 买卖股票的最佳时机 III💡解题思路🤔遇到的问题💻代码实现🎯题目总结 188. 买卖股票的最佳时机 IV💡解题思路🤔遇到的问题&#x1f4…

智能优化算法——混合领导优化算法(MatlabMatlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

LabVIEW为什么不能在RT机箱内看到NI-IMAQ设备

LabVIEW为什么不能在RT机箱内看到NI-IMAQ设备 最近把NI-IMAQ更新到最新的1394版本。这个新驱动工作良好。但是,当打开MAX,NII MAQ设备却在RT PXI机箱里找不到。 问题最有可能是NIIMAQ服务器的版本跟主机PC和RT目标设备是不同的。为保证通信正常NII MAQ服…