JAVA中的类似CAS的方法如AtomicInteger.getAndIncrement方法调用了Unsafe.getAndAddInt,再调用了Unsafe中的native方法compareAndSwapInt,由C++实现,最终的指令是 LOCK_IF_MP + cmpxchgl,cmpxchgl指令本身不是原子性的。
在单核CPU中, 能够在一个指令中完成的操作都可以看作为原子操作, 因为中断只发生在指令间。
所以在单核CPU中cmpxchgl不需要加锁
JAVA中的类似CAS的方法如AtomicInteger.getAndIncrement方法调用了Unsafe.getAndAddInt,再调用了Unsafe中的native方法compareAndSwapInt,由C++实现,最终的指令是 LOCK_IF_MP + cmpxchgl,cmpxchgl指令本身不是原子性的。
在单核CPU中, 能够在一个指令中完成的操作都可以看作为原子操作, 因为中断只发生在指令间。
所以在单核CPU中cmpxchgl不需要加锁