一、定义
原子性:一个操作不可被中断,要么全部执行成功要么全部执行失败。
可见性:指一个线程对共享变量所作的修改能够被其他线程及时地看到。
由上面的定义可知,原子性和可见性的区别,但从字面意思其实很难理解在变成中程序是如何保证的。
二、什么是原子性?
由上面的定义可知,就是不可被中断,那这代表什么意思呢?接下来我用比较通俗的话语来解释。
银行转账就是一个很好的例子,它其实分为好几个步骤:1.输入金额发起转账 -》 2.对方收款 -》3.收款成功金额增加 -》4.发起方转账成功扣款
这几个步骤对于现实情况来说,每一个步骤中断了都会让这个转账失败,而转账失败后,所有都要从头开始执行,例如步骤3中断,那么也需要从1开始重新执行
,这所谓的4个步骤看似分开,但又需要保持连贯性,这种转账流程其实就保持了一种“原子性”,不能中断,一旦中断就重新开始。数据库中的事务其实就是一种原子性操作。
三、什么是可见性?
可见性,要明白可见,就要理解为什么可见,谁要可见,给谁看到?接下来我用比较通俗的华语来解释。
我们做个游戏,现在有6个人在互相不可见房间里,外面公共区域有一个不透明的纸盒子,每个人手上都有标着红色和蓝色的2个球,我们依次打开门让他们带出一个球放入纸盒,最后要保证正好是3个红球和3个蓝球游戏就赢了,好了游戏开始。
从游戏规则可知,一开始大家都知道盒子是空的,第一个放入的人可以任意放一个颜色的球,但从第二个开始这时该如何保证游戏得到想要的结果呢?
因为大家都看不到,所以我们要赢,那么需要每次在放入这个球之前要已知盒子里面到底有什么球,那现在我们需要改个规则,我们在纸盒子外面安排一个人,在每次放入球之后大声的播报下盒子内的具体的球信息就可以了。虽然违反规则但这能保证一定赢。
由上面的游戏我们就能看出,可见性的重要性,以及为什么要可见。
暂时停笔,后续继续辨析。