GCC中volatile是禁止GCC做些优化,如某些指令对返回值没影响就不执行,在loop操作中,某些指令生成一致结果,也不执行。
JAVA中volatile又不一样。依稀记得很多年前看过Oracle一遍说明,JAVA Volatile在SMP 架构中使用,主要是多CPU存储同一块变量(多线程),默认情况下每个CPU都会cache 变量,在SMP架构中多CPU cache间可能不一致,当指定Volatile后,CPU不Cache变量值,直接存取内存,使用场景针对多线程并发。
GCC中volatile是禁止GCC做些优化,如某些指令对返回值没影响就不执行,在loop操作中,某些指令生成一致结果,也不执行。
JAVA中volatile又不一样。依稀记得很多年前看过Oracle一遍说明,JAVA Volatile在SMP 架构中使用,主要是多CPU存储同一块变量(多线程),默认情况下每个CPU都会cache 变量,在SMP架构中多CPU cache间可能不一致,当指定Volatile后,CPU不Cache变量值,直接存取内存,使用场景针对多线程并发。