jvm多线程底层执行流程分析

内容参考: https://www.cnblogs.com/dennyzhangdd/p/6734638.html

1.对于刚开始不支持原语操作的硬件来说,多线程的执行是以开关中断来实现的。但是对于支持原语操作的硬件,比如在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把总线锁住,这样同一总线上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性。

%ifdef _X_UP_
%define _X_LOCK_
%else
%define _X_LOCK_    lock
%endif

@_XPEER2_atomic_incl@4:
    mov eax , 1
    _X_LOCK_ inc DWORD [ecx+0] 
    jnz short @inclOK@
    xor eax , eax
@inclOK@:
    ret

@_XPEER2_atomic_decl@4:
    mov eax , 1
    _X_LOCK_ dec DWORD [ecx+0] 
    jnz short @declOK@
    xor eax , eax
@declOK@:
    ret    

@_XPEER2_atomic_CAS@12:
    mov eax , [esp+4]
    _X_LOCK_ cmpxchg [ecx],edx
    mov eax , 1
    jz short @CASDone@
    xor eax , eax
@CASDone@:
    ret 4

@_XPEER2_atomic_CAS2@12:
    push ebx
    push ebp    
    mov  ebp , ecx
    mov  ecx , [edx+4]
    mov  ebx , [edx+0]
    mov  edx , [esp+12]
    mov  eax , [edx+0]
    mov  edx , [edx+4]    
    _X_LOCK_ cmpxchg8b [ebp]
    mov  eax , 1
    jz short @CAS2Done@
    xor  eax , eax 
@CAS2Done@:
    pop  ebp
    pop  ebx
    ret 4    

2.下图是Java多线程的底层执行

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值