关于volatile的可见性疑问求解

网上翻阅了大量资料去了解volatile的底层实现。大致结果为:可见性中的写操作强制刷新进主存的实现是lock前缀指令完成,可见性中的缓存行无效的实现是MESI协议。 又了解到指令重排序是内存屏障实现的,又看到很多说内存屏障同时又实现了可见性,写屏障会强制刷新主内存,读屏障会强制从主存读取数据, 所以有点晕了,volatile的可见性到底是MESI协议实现的还是内存屏障实现的?

你可以参考一下这篇文章,说的比较细
https://www.cnblogs.com/caturra/p/10864522.html

volatile是java内存模型规范的,MESI协议是解决缓存一致性问题的,内存屏障是操作系统提供的特性