本文共 291 字,大约阅读时间需要 1 分钟。
在多线程中,一个互斥锁包含了内存屏障来确保加载和存储操作是按照正确顺序的。但是,这并不表示没有问题。因为编译器在优化代码时,可能会将变量加载到寄存器中,以便提升性能。此时,如果该变量时对其他线程可见的,那么这种优化会导致该变量在寄存器中的变化不被其他线程获知。
反之亦然,如果变量随时会被编译器无法检测到的外部源修改,那么这种优化亦是不被提倡的,所以可以使用关键字 volatile
修饰重要变量,告知编译器不要对其进行优化。
需要注意的是关键字 volatile
只是确保每次从内存加载该变量而不是使用寄存器中的缓存值,它并不保证代码访问的该变量是逻辑正确的。
详细介绍可以参见:
转载地址:http://fvdws.baihongyu.com/