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

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

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

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

voliate关键字修饰的变量,发生修改,通常有四个阶段:it

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

而后是use assigh数据

此时lock主内存中数据协议

而后store write底层

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

相关文章
相关标签/搜索