volatile为什么保证可见性和有序性

可见性

volatile保证了修饰的共享变量在转换为汇编语言时,会加上一个以lock为前缀的指令,当CPU发现这个指令时,立即会做两件事情:

  1. 将当前内核中线程工作内存中该共享变量刷新到主存;
  2. 通知其他内核里缓存的该共享变量内存地址无效;

防止指令重排

指令重排.png

普通变量: 仅保证在该方法执行过程中所有依赖赋值结果的地方都能得到正确的结果,而不能保证变量赋值操作的顺序和代码中的顺序一致。

被volatile修饰的变量,会加一个lock前缀的汇编指令。若变量被修改后,会立刻将变量由工作内存回写到主存中。那么意味了之前的操作已经执行完毕: Memory Barrier(内存屏障)

读写屏障.png

总结: 其实就是汇编之后得到的指令是会加一个lock前缀的汇编指令从而出现内存屏障.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容