mov edx,5 mov eax,3 LOCK CMPXCHG [destAddress],edx * 第3条指令中的destAddress是一段内存的起始地址,如果destAddress地址中的数据等于eax寄存器中的值,则将edx中的值,写入destAddress中。 * CMPXCHG是一条指令,执行时能保证原子性。 * 1、读取内存数据,放到cpu的cache(当一个CPU修改缓存中的字节时,服务器中其他CPU会被通知,它们的缓存将视为无效) * 2、修改数据 * 3、将cpu的cache中的数据同步回内存 * 但如果在多核cpu下,就不能保证多个cpu原子的修改destAddress内存地址了。所以需要用LOCK 描述符来限制CMPXCHG指令,LOCK描述符的意思是,在执行被描述的指令时(且指令中第一个参数是内存地址时)。锁住内存总线(锁住整个内存),让其他cpu不能读写内存。来保证同一时刻只有一个cpu在修改内存 java中的cas操作,就是用的LOCK CMPXCHG指令; volatile修饰符也是LOCK指令。 {{:pasted:20190124-113916.png}}