1. 引言

原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。

2. 术语定义

术语 英文 解释
缓存行 Cache line 缓存的最小操作单位
比较并交换 Compare and Swap CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化则不交换。
CPU流水线 CPU pipeline CPU流水线的工作方式就象工业生产上的装配流水线,在CPU中由5~6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5~6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。
内存顺序冲突 Memory order violation 内存顺序冲突一般是由假共享引起,假共享是指多个CPU同时修改同一个缓存行的不同部分而引起其中一个CPU的操作无效,当出现这个内存顺序冲突时,CPU必须清空流水线。

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

32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。

3.1 处理器自动保证基本内存操作的原子性

首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度,跨多个缓存行,跨页表的访问。但是处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。

3.2 使用总线锁保证原子性

第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写(i++就是经典的读改写操作)操作,那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致,举个例子:如果i=1,我们进行两次i++操作,我们期望的结果是3,但是有可能结果是2。如下图

原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)相关推荐

  1. c++并发编程之原子操作的实现原理

    原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作". 处理器如何实现原 ...

  2. 【檀越剑指大厂--并发编程】并发编程总结

    并发编程 一.并发基础 1.什么是并行和并发? 并行,表示两个线程同时(同一时间)做事情. 并发,表示一会做这个事情,一会做另一个事情,存在着调度. 单核 CPU 不可能存在并行(微观上). 2.什么 ...

  3. js 原子级操作_原子操作类(二)原子操作的实现原理

    原子(atom)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" .在多处理器上实现原子 ...

  4. python queue 生产者 消费者_Queue: 应用于生产者-消费者模式的Python队列

    图片来源于网络 版权声明 © 著作权归作者所有 允许自由转载,但请保持署名和原文链接. 不允许商业用途.盈利行为及衍生盈利行为. 什么是Queue? Queue是Python标准库中的线程安全的队列( ...

  5. 进程上下文、中断上下文及原子上下文

    谈论进程上下文 .中断上下文 . 原子上下文之前,有必要讨论下两个概念: a -- 上下文 上下文是从英文context翻译过来,指的是一种环境.相对于进程而言,就是进程执行时的环境: 具体来说就是各 ...

  6. 《Linux操作系统 - 驱动开发》第9章 进程上下文、中断上下文及原子上下文

    谈论进程上下文 .中断上下文.原子上下文之前,有必要讨论下两个概念: a – 上下文 上下文是从英文context翻译过来,指的是一种环境.相对于进程而言,就是进程执行时的环境: 具体来说就是各个变量 ...

  7. java原子操作的实现原理--转载

    原文地址:http://www.infoq.com/cn/articles/atomic-operation 1. 引言 原子(atom)本意是"不能被进一步分割的最小粒子",而原 ...

  8. 原子操作的实现原理(锁和循环CAS)

    本文转自https://www.cnblogs.com/duanxz/archive/2012/08/09/2630071.html 一.引言 原子(atom)本意是"不能被进一步分割的最小 ...

  9. 《深入浅出DPDK》读书笔记(五):同步互斥机制

    本文内容为读书笔记,摘自<深入浅出DPDK> 56.原子操作 原子(atom)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为& ...

最新文章

  1. it转正述职报告_普通员工转正述职报告范文
  2. OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了
  3. android 图片作为背景图片,Android设置网络图片为手机背景图片的方法
  4. Spring任务调度
  5. Swift学习------常量与变量
  6. hibernate教程--检索方式(hql,sql,QBC)
  7. C#枚举数值与名称的转换
  8. pandas 读csv 报错 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xca in position 0: invalid cont
  9. python入门区块链技术_区块链入门教程
  10. hdu 6026 Deleting Edges(最短路计数)
  11. 机器人 铑元素_智能机器人 三十三
  12. creator 静态属性_cocos creator 属性面板设置
  13. axure8 Mac破解版+汉化包
  14. spring security 实现微信登录
  15. 智能小车制作过程全纪录:一、硬件平台
  16. STM32的定时器中断与实例
  17. PLC 控制柜常用电气元件整理表
  18. katana之渲染输出AOV
  19. 基于 yolo_v5 训练识别人物
  20. xxd航模电调电路图

热门文章

  1. 华为ensp小型综合实验
  2. 2023 ChatGPT镜像替代网站 无需注册打开就能体验
  3. css做文字背景闪烁效果
  4. 应聘表计算机水平填什么,应聘表计算机水平怎么填写(如何描述计算机水平)
  5. Node — Koa2
  6. 经典案例拆解:3天涨粉18W,我是如何策划的免费送活动的?
  7. 边学边敲边记之爬虫系列(八):Scrapy系统爬取伯乐在线
  8. 计算机作品画图板软件四年级,四年级计算机《用画图软件画画》
  9. UDDi注册中心的实现
  10. 编程的第一次博客:记录和规划