[读书笔记]原子操作实现的原理

一些术语

名称解释
内存顺序冲突内存顺序冲突一般是由于假共享引起的,假共享是指多个cpu同时修改同一个缓存行的不同部分而引起 其中一个cpu的操作无效,当这个内存顺序冲突时,cpu必须清空流水线

处理器如何实现院子操作

使用总线锁保证原子性

所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号是,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存.

使用缓存锁保证原子性

同一时刻,我们只需要保证对某个内存地址的操作时原子性即可,但总线锁定吧CPU和内存之间的通信锁住了.,锁定期间,其他处理器不能操作其他内存地址的数据.总线锁定开销太大

所谓缓存锁定,是指在内存区域如果被缓存在处理器的缓存行中,并在LOCK操作期间被锁定, 那么当他执行所操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许他的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行数据时,会使缓存行无效

两种情况不会使用缓存锁定

  1. L当操作数据不能被缓存在处理器内部,或操作的数据跨多个缓存行时,会调用总线锁定
  2. 有些处理器不支持缓存锁定

CAS

CAS正是利用了处理器提供的CMPXCHG执行来实现的

cas实现原子操作的三大问题

  1. ABA问题

  2. 循环时间长开销大

  3. 只能保证一个共享变量的原子操作

使用锁机制实现院子操作

JVM内部提供了很多种锁机制,有偏向锁,轻量级锁和互斥锁.

除了偏向锁,JVM实现锁的方式都使用了循环CAS

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值