一、volatile如何保证内存可见性
1.被volatile修饰的变量一旦发生改变,会立即将缓存中的数据写入到内存当中。
2.其他cpu处理器通过嗅探在总线上传播的数据来查看自己的缓存中的数据是否过期,如果过期,就会将缓存中对应的数据置为无效。当处理器要对这个数据进行修改操作的时候,会重新从内存中将数据读取到缓存中。
二、volatile如何保证指令重排序
编译器和处理器都会执行指令重排的优化,如果在指令间插入一条内存屏障,那么内存屏障前后的指令会被禁止重排序优化. 对volatile变量进行写操作时,会在写操作后面加入一条store屏障指令,对volatile变量进行读操作时,会在读操作前加入一条load屏障指令。