首页 > 其他 > 详细

volatile关键字的理解,不能保证修改的原子性

时间:2020-06-14 21:45:08      阅读:49      评论:0      收藏:0      [点我收藏+]

voliate 关键字基于c++,以及更底层汇编实现,在线程对于本地内存中值修改完成,也就是assigh原子操作结束以后。

会立马对内存中这个数据加锁,也成为内存屏障,这个时候通过mesi或者总线协议其他线程中这个值就会失效,从而保证了修改的可见性。

但是如果其他线程在此时已经修改了本地内存中这个值副本的值,但是还没来得及assigh回去,这个时候这个修改就丢失了。

voliate关键字修饰的变量,发生修改,一般有四个阶段:

从主内存从读取变量副本到本地内存 read load

然后是use assigh

此时lock主内存中数据

然后store write

其中 read load use assigh都不能保证原子性,只有最后写入的时候能保证原子性。

 

volatile关键字的理解,不能保证修改的原子性

原文:https://www.cnblogs.com/CooperXia-847550730/p/13126952.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!