Java并发01基本原理03-原子操作

一. 处理器实现原子操作

  1. 通过总线锁保证原子性:某个处理器在总线上输出LOCK #信号,其他处理器的请求将被阻塞,该处理器独占共享内存。
  2. 通过缓存锁保证原子性:即不锁总线了,而是把该内存地址对应的缓存行锁住。例如:多个CPU都有某个内存地址的缓存行,如果某个CPU要对这个缓存行进行写回操作时,那么内存地址对应的所有缓存行都被锁住。
    在这里插入图片描述
    参考:
    https://yemablog.com/posts/cache-locking-2
    https://www.jianshu.com/p/2c212631c7ca
    https://mp.weixin.qq.com/s/PDUqwAIaUxNkbjvRfovaCg

二. Java实现原子操作

  1. 循环CAS实现原子操作
    (1)基本概念
    CAS比较并交换,即使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替换当前变量的值。
    (2)原理
    CAS操作利用处理器提供的CMPXCHG指令实现,保证该操作的原子性
    (3)不足
    1)ABA问题,解决办法:加个版本号。AtomicStampedReference
    2)自旋CAS如果长时间不成功,会给CPU带来很大开销。
    3)只保证一个共享变量的原子操作,但对多个共享变量操作时无法保证。

  2. 使用锁机制保证原子操作
    只有获得锁的线程才能操作锁定的内存区域,这些锁机制即为偏向锁、轻量级锁、互斥锁。但轻量级锁、互斥锁也依赖循环|CAS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值