原子操作的实现原理

本文介绍了原子操作的概念及其在处理器中的实现方式,包括缓存加锁和总线加锁。接着讨论了Java中如何使用CAS和锁机制实现原子操作,分析了CAS操作的ABA问题和循环开销,并提出了解决策略。
摘要由CSDN通过智能技术生成

1.什么是原子操作

原子本意是不能被进一步分割的最小粒子,而原子操作就意味着不可被中断的一个或一系列操作。

原子操作的常见术语

缓存行:Cache line 缓存的最小操作单位

比较并交换:Compare and Swap。CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。

CPU流水线:CPU pipeline。CPU流水线的工作发生就像是工业生产上的装配流水线,在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一个X86指令分成5-6步后再由这些电路单元分别执行,这样就能实现一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。

内存顺序冲突:Memory order violation。内存顺序冲突一般是假共享引起的,假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效,当出现这个内存顺序冲突时,CPU必须清空流水线。

2.处理器如何实现原子操作

32位IA-32处理器使用基于的缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。
首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。
但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度、跨多个缓存行和跨页表的访问。但是,处理器提供总线锁定和缓存锁定两个机制来保证复杂操作的原子性。

  1. 使用总线锁保证原子性。
    第一个机制是通过
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值