1) CPMXCHG
2)XCHG
The LOCK prefix is automatically assumed for XCHG instruction.
——From Intel手册 8.1.2.2 Software Controlled Bus Locking
CPU保证被其修饰的指令的原子性。
1)依赖内存有序模型,来保证读取指令有序;
2)通过总线锁或缓存一致性,保证被修饰指令操作的数据一致性:
举个栗子
Java的DCL中若返回的变量不加volatile修饰,则可能会由于指令重排导致另一个线程获取到一个非完全初始化的对象。
当volatile修饰的变量所在的代码段成为热点,被JIT编译为汇编代码后,会增加LOCK前缀来禁止指令重拍和数据一致;
常见的缓存一致性协议有:MESI,MESIF(MESIF是缓存行的状态标识,M:Modified, E: Exclusive, S:Shared, I:Invalid, F: Forwad),通过标记缓存行的状态和处理器间的通讯来实现。