volatile关键字及内存屏障

volatile

volatile 的主要作用是确保变量的可见性有序性,但不保证操作的原子性,volatile 变量的读写操作会直接作用于主内存,而不是线程的本地缓存。这确保了当一个线程修改了 volatile 变量时,这个修改会立即反映到主内存中,从而对其他线程可见。

可见性

  • 定义:当一个线程修改了一个 volatile 修饰的变量时,其他线程能够立即看到这个变量的最新值。
  • 实现机制volatile 修饰的变量的读写操作都会直接作用于主内存,而不是线程的本地缓存。这确保了变量的值对所有线程都是可见的。

禁止指令重排序

  • 定义:在没有 volatile 的情况下,编译器和处理器可能会对指令进行重排序以优化性能。volatile 通过插入内存屏障来禁止对 volatile 变量的指令重排序。
  • 内存屏障volatile 通过内存屏障确保对变量的读写操作按照程序定义的顺序执行。

内存屏障

一种用于控制内存操作顺序的机制。内存屏障的主要作用是防止编译器和 CPU 对指令进行重排序,从而确保多线程环境下的内存可见性和操作顺序。

Load Barrier(加载屏障)

Store Barrier(存储屏障)

StoreLoad Barrier

LoadStore Barrier

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计