如何理解原子性和可见性这两个在多线程中的概念

news/2025/2/27 17:46:06/文章来源:https://www.cnblogs.com/woaixingxing/p/18741596

一、定义

原子性:一个操作不可被中断,要么全部执行成功要么全部执行失败。

可见性:指一个线程对共享变量所作的修改能够被其他线程及时地看到。

由上面的定义可知,原子性和可见性的区别,但从字面意思其实很难理解在变成中程序是如何保证的。

二、什么是原子性?

由上面的定义可知,就是不可被中断,那这代表什么意思呢?接下来我用比较通俗的话语来解释。

银行转账就是一个很好的例子,它其实分为好几个步骤:1.输入金额发起转账 -》 2.对方收款 -》3.收款成功金额增加 -》4.发起方转账成功扣款

这几个步骤对于现实情况来说,每一个步骤中断了都会让这个转账失败,而转账失败后,所有都要从头开始执行,例如步骤3中断,那么也需要从1开始重新执行

,这所谓的4个步骤看似分开,但又需要保持连贯性,这种转账流程其实就保持了一种“原子性”,不能中断,一旦中断就重新开始。数据库中的事务其实就是一种原子性操作。

三、什么是可见性?

可见性,要明白可见,就要理解为什么可见,谁要可见,给谁看到?接下来我用比较通俗的华语来解释。

我们做个游戏,现在有6个人在互相不可见房间里,外面公共区域有一个不透明的纸盒子,每个人手上都有标着红色和蓝色的2个球,我们依次打开门让他们带出一个球放入纸盒,最后要保证正好是3个红球和3个蓝球游戏就赢了,好了游戏开始。

从游戏规则可知,一开始大家都知道盒子是空的,第一个放入的人可以任意放一个颜色的球,但从第二个开始这时该如何保证游戏得到想要的结果呢?

因为大家都看不到,所以我们要赢,那么需要每次在放入这个球之前要已知盒子里面到底有什么球,那现在我们需要改个规则,我们在纸盒子外面安排一个人,在每次放入球之后大声的播报下盒子内的具体的球信息就可以了。虽然违反规则但这能保证一定赢。

由上面的游戏我们就能看出,可见性的重要性,以及为什么要可见。

暂时停笔,后续继续辨析。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Security认证失败逻辑

通过一系列的过滤器最终走到 FilterSecurityInterceptor package org.springframework.security.access.vote;public class AffirmativeBased extends AbstractAccessDecisionManager {public AffirmativeBased(List<AccessDecisionVoter<? extends Object>> deci…

关于书店管理系统的二次开发

一、来源 来自同学期末大作业。实现了基本的书店业务功能,包括书本信息管理、客户信息管理、购物车操作以及订单生成与保存等。 二、运行环境 + 运行结果的截图 操作系统:Windows 11 开发工具:Visual Studio 2022// BookStore.h点击查看代码 #ifndef BOOKSTORE_H #define BO…

CNC数控机床运行状态参数采集联网 对接软件MES 系统

IP 端口 TCP端口 流程任务 当前位置或者目标位置及描述 状态 需要接口内容 请求地址-AGV 请求AGV参数 请求AGV返回信息 PLC-地址 写入PLC值 读取PLC值 EDM-地址 写入EDM值 读取EDM值进入上下料进程 进入EDM上料台动作-动作 即将进入EDM上料台 "1.达…

Redis+Docker集群部署

机器故障了怎么办? Redis 是内存数据库,我们知道可以通过持久化机制,保存快照或者保存记录日志的方式,将数据持久化到磁盘。但是,如果机器故障了或磁盘坏了,数据就不就全没了吗?这种情况应该怎么办呢?别担心,考虑主从模式。 主从模式 给主节点 Master 配置一个从节点 …

【T20天正电气V10.0软件下载与安装教程】

1、安装包 扫描下方二维码关注「软知社」,后台回复【024】三位数字即可免费获取分享链接,无广告拒绝套路; 2、安装教程双击T20天正电气V10.0安装包,弹窗安装对话框选择我接收,点击下一步选择安装位置,点击下一步点击下一步等待安装进度完成安装完成,点击完成按钮点击下…

windows底层激活破解一步到位,TSforge也太暴力了!

windows底层激活破解一步到位,TSforge也太暴力了! windows底层激活破解一步到位,TSforge也太暴力了! 微软系统一直是需要收费的,也是电脑用户们经常遇到的问题,市面上也有很多工具, 但是今天的工具是最新的且**呼声最高、最彻底的**,需要的话赶紧保存下来,实际使用只需…

No.23 CSS--定位

一、定义position属性指定了元素的定位类型。其中,绝对定位和固定定位会脱离文档流. 设置定位之后:可以使用四个方向值进行调整位置:Ieft、top、right、bottom.二、相对定位<head><meta charset="UTF-8"><meta name="viewport" content=&q…

机器人保养指南周期性检修

机器人保养指南——那智不二越机器人日常维护、专业维修与周期性检修在进行那智不二越机器人的日常检查、维修、部件更换或任何其他相关作业时,首要且至关重要的一步是确保已切断电源,只有在完全断电的情况下,方可安全地进行后续操作。此外,还应在一次电源等关键位置设置明…

OERV兴趣探索:模拟器移植

最近看了很多开源项目,主要都集中在模拟器方面,我指的是游戏模拟器比如GameBoy或者PlayStation这一类。现在想玩这系列的游戏可以在手机或者电脑下载相应的模拟器,并且获取对应的ROM文件,不过也有一些模拟器是可以运行在Linux上面的,为了进一步探索,我选择了相对较小的项…

HTTP协议与RESTful API实战手册(二):用披萨店故事说透API设计奥秘

title: HTTP协议与RESTful API实战手册(二):用披萨店故事说透API设计奥秘 🍕 date: 2025/2/27 updated: 2025/2/27 author: cmdragon excerpt: 📦 本系列第二篇通过披萨店创业的完整案例,手把手教你: 用外卖订单理解HTTP协议细节 5个RESTful设计常见误区与修正方案 …

全局注册svg批量自动引入,动态修改svg以及样式配置问题

1.安装依赖npm i vite-plugin-svg-icons2.文件存放svg 3.全局组件svg-icon(直接放到全局组件目录下)<template><svg class="svg-icon"><use :xlink:href="`#icon-${props.name}`" class="mySVG":style="stroke: + props.…

msyql中单表语句

二、聚合函数 (1)max 最小值 select max(math) from student (2)min 最大值 select min(math) from student (3)sum 总数 select sum(math) from student (4)avg平均数 select avg(math) from student (5)count 统计个数 select count(math) from stu…