用户工具


	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指令。