volatile可见性和原子性问题

volatile既然是线程不安全的保证不了原子性,为什么还有可见性呢?线程1的值在寄存器里面,没有写的内存壁,切换到线程2,这个值就会导致线程不安全,那么其他线程里面拿到的值也不是最新的,那为什么就具有可见性呢?

线程1 写入 volatile 修饰的变量后会导致线程2本地内存的值失效,然后去主内存取最新的值,再底层的话主要用到了缓存一致性协议 MESI

33333@[](

  • 333
表头表头
单元格单元格
单元格单元格

)