volatile关键字的理解,不能保证修改的原子性
voliate 关键字基于c++,以及更底层汇编实现,在线程对于本地内存中值修改完成,也就是assigh原子操作结束以后。
会立马对内存中这个数据加锁,也成为内存屏障,这个时候通过mesi或者总线协议其他线程中这个值就会失效,从而保证了修改的可见性。
但是如果其他线程在此时已经修改了本地内存中这个值副本的值,但是还没来得及assigh回去,这个时候这个修改就丢失了。
voliate关键字修饰的变量,发生修改,一般有四个阶段:
从主内存从读取变量副本到本地内存 read load
然后是use assigh
此时lock主内存中数据
然后store write
其中 read load use assigh都不能保证原子性,只有最后写入的时候能保证原子性。