JMM与JVM内在 C/C++中书写汇编指令

参考本博客文章:

C/C++中书写汇编指令

JMM(Java内存模型)JMM来源于JSR-133(http://gee.cs.oswego.edu/dl/jmm/cookbook.html)。

JMM的目的是为了解决Java多线程对共享数据的读写一致性问题,通过Happens-Before语义定义了Java程序对数据的访问规则,修正之前由于读写冲突导致的Cache数据不一致的问题。具体到Hotspot VM的实现,主要是由OrderAccess类定义的一些列的读写屏障来实现JMM的语义。

在所有的 X86 CPU 上都具有锁定一个特定内存地址的能力,当这个特定内存地址被锁定后,它就可以阻止其他的系统总线读取或修改这个内存地址。这种能力是通过 LOCK 指令前缀再加上下面的汇编指令来实现的。当使用 LOCK 指令前缀时,它会使 CPU 宣告一个 LOCK# 信号,这样就能确保在多处理器系统或多线程竞争的环境下互斥地使用这个内存地址。当指令执行完毕,这个锁定动作也就会消失。
能够和 LOCK 指令前缀一起使用的指令如下所示:

BT, BTS, BTR, BTC   位检测指令
XCHG, XADD  
ADD, OR, ADC, SBB  
AND, SUB, XOR   
NOT, NEG, INC, DEC  
注意:XCHG 和 XADD (以及所有以 'X' 开头的指令)都能够保证在多处理器系统下的原子操作,它们总会宣告一个 "LOCK#" 信号,而不管有没有 LOCK 前缀。

猜你喜欢

转载自www.cnblogs.com/mazhimazhi/p/11437792.html