1. 缓存导致的可见性问题

    CPU的寄存器、cache和内存之间的冲突,对于某个共享资源,CPU1将其拿到寄存器中,并更新但未写回内存,对于CPU2即不可见。

    1. 线程切换带来的原子性问题

    高级语法的一条指令,在底层可能由多条指令组成,比如对于32位机器来说,写long类型的数据(64位)分为写高32位和低32位。

    1. 编译优化带来的有序性问题

    编译优化会导致部分指令顺序重排。