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