有volatie修饰的变量,每次操作时遵循下面动作:
从内存取值 ---> 放入寄存器 ----> 操作 ---->写回内存
没有volatie修饰的变量,操作可能遵循(可能就是不是所有情况都如此):
从内存取值 ---> 放入寄存器 ----> 第一次操作 -----> 第二次操作(此时仍操作寄存器中的值) …… ---->第N次操作 ---->写回内存
volatile变量的修改要求即时被所有cpu可见,所以会要求cache一致性。对一些weak memory model的cpu,还有对memory access order的限制。