volatile
volatile 的主要作用是确保变量的可见性和有序性,但不保证操作的原子性,volatile 变量的读写操作会直接作用于主内存,而不是线程的本地缓存。这确保了当一个线程修改了 volatile 变量时,这个修改会立即反映到主内存中,从而对其他线程可见。
可见性
- 定义:当一个线程修改了一个
volatile修饰的变量时,其他线程能够立即看到这个变量的最新值。- 实现机制:
volatile修饰的变量的读写操作都会直接作用于主内存,而不是线程的本地缓存。这确保了变量的值对所有线程都是可见的。
禁止指令重排序
- 定义:在没有
volatile的情况下,编译器和处理器可能会对指令进行重排序以优化性能。volatile通过插入内存屏障来禁止对volatile变量的指令重排序。- 内存屏障:
volatile通过内存屏障确保对变量的读写操作按照程序定义的顺序执行。
内存屏障
一种用于控制内存操作顺序的机制。内存屏障的主要作用是防止编译器和 CPU 对指令进行重排序,从而确保多线程环境下的内存可见性和操作顺序。
Load Barrier(加载屏障)
Store Barrier(存储屏障)
StoreLoad Barrier
LoadStore Barrier