其他分享
首页 > 其他分享> > 深入理解JMM-volatile原理分析

深入理解JMM-volatile原理分析

作者:互联网

并发专题

什么是 volatile

能够保证线程可见性,当一个线程修改共享变量时,能够保证对另外一个线程可见性,不能保证原子性

volatile 的特性

volatile实现

volatile hotspot实现

src/hotspot/share/interpreter/bytecodeinterpreter.cpp
判断是否为 volatile 的,且 CPU 平台支持多核核 atomic 操作则调用调用 OrderAccess::fence()

int field_offset = cache->f2_as_index();
          if (cache->is_volatile()) {
            if (support_IRIW_for_not_multiple_copy_atomic_cpu) {
              OrderAccess::fence();
}

src/hotspt/os_cpu/linux_x86/orderAccess_linux_x86.hpp
x86 架构实现OrderAccess::fence(),使用 lock addl 指令实现的,利用lock实现类似内存屏障的效果

inline void OrderAccess::storeload()  { fence(); }
inline void OrderAccess::fence() {
   // always use locked addl since mfence is sometimes expensive
#ifdef AMD64
  __asm__ volatile ("lock; addl $0,0(%%rsp)" : : : "cc", "memory");
#else
  __asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory");
#endif
  compiler_barrier();
}

Lock前缀指令作用

什么是重排序

解决重排序问题

内存屏障解决重排序

内存屏障分类

synchronized 与 volatile 区别

标签:线程,缓存,屏障,volatile,内存,JMM,原理,排序
来源: https://blog.csdn.net/janyxe/article/details/122601431