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