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

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

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

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

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

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

然后是use assigh

此时lock主内存中数据

然后store write

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

 

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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/355017

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午9:01
下一篇 2023年3月2日 上午9:01

相关推荐