1. 英文:atomic operation 。
  2. 定义:一组不会被线程调度机制打断的操作,即:一旦该操作开始,就一直运行到结束,中间不会有任何上下文切换到另一个线程。
  3. 拓展

(1)++i 和 i++ 是否是原子操作?答案:不是。

汇编代码如下:

步骤如下:

(1)变量 i 值由内存拷贝到寄存器 eax 中。

(2)寄存器 eax 自增 1 。

(3)将寄存器 eax 中的值写入内存中。

所以,++i 和 i++ 不是原子操作。

(2)int a = b 是否是原子操作?答案:不是。

因为由于现代计算机 CPU 架构体系的限制,数据不可以直接从内存搬运到另外一块内存,必须借助寄存器中断。所以这条语句一般对应两条计算机指令,即将变量b的值搬运到某个寄存器(如 eax )中,再从该寄存器搬运到变量 a 的内存地址。

栗子:

int a = 100;
int b = 997;
a = b;

汇编代码如下:

movl $100, -8(%rbp)  ; 将 100 赋值给 a 。
movl    $997, -4(%rbp)  ; 将 997 赋值给 b 。
movl    -4(%rbp), %eax  ; 将 b 赋值给 寄存器 eax 。
movl    %eax, -8(%rbp)  ; 将 寄存器 eax 赋值给 a 。

上述后两条指令就是 a = b 的汇编代码,所以就有可能第一条指令执行完毕之后,被 OS 上下文切换,所以该代码也不是线程安全的。

(SAW:Game Over!)

OS / 理论 / 什么是原子操作?相关推荐

  1. 考研OS备考|计算机操作系统|汤小丹慕课版|课后习题答案|复试拓展

    本文主要是考研复试备考自用,所以课后习题答案主要是简答题部分,此外还有其他的简答补充.如果发现有误,欢迎在评论区或者私信指出. 计算机操作系统|汤小丹慕课版|课后习题答案|考研备考 第1章 操作系统引 ...

  2. 八年程序员之书籍篇--OS/Linux(二):Kernel

    谈到Linux Kernel书籍,首先得提以下几本: 1.<Linux Kernel Development>-<Linux内核设计与实现>-Robert Love-陈莉君/康 ...

  3. Linux内核设计与实现 原书第3版中文版pdf

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 下载地址 ...

  4. 《操作系统》期末主观题梳理

    操作系统简答题 文章目录 操作系统简答题 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第一章 在计算机系统上配置OS(operating system, 操作系统)的目标是 ...

  5. 2022新年重磅技术分享|深入理解Linux操作系统

    hi 大家好,这里是极客重生,愿2021所有的遗憾都是2022惊喜的铺垫,前路浩浩荡荡,万事尽可期待,祝大家新的一年付出都有收获! 这次分享的主题是: 如何掌握和精通一门技术 如何学习和攻破操作系统 ...

  6. 计算机相关经典书籍推荐

    1.Java程序设计教程实验手册(翻译版) 目前为止,<Java程序设计教程实验手册(翻译版) >这本书是我见过的最好的编程书.从第一章到第十章,里面的所有习题都做一遍.当你做完了这些,你 ...

  7. 计算机及相关经典书籍收集

    1.Java程序设计教程实验手册(翻译版) 目前为止,<Java程序设计教程实验手册(翻译版) >这本书是我见过的最好的编程书.从第一章到第十章,里面的所有习题都做一遍.当你做完了这些,你 ...

  8. C语言推荐书籍从入门到进阶带你走上大牛之路(珍藏版)

    首先是关于学习技术书籍的一些心得,很多人给我留言说看不下去书,想看视频学习,我不反对看视频学习,但是编程作为一门需要不断钻研的技术,只靠看视频是注定不可能成为专家的,还是得从经典的书籍中汲取知识,再加 ...

  9. Linux 【进程】

    目录 1.冯诺依曼体系结构(硬件结构) 冯诺依曼结构计算机的基本工作原理是什么? 举例说明数据的流动过程 2.操作系统简述 总结:先描述,再组织 3.进程 4.通过代码创建子进程:fork 进程终止 ...

最新文章

  1. 利用计算机解决问题实际依赖,行测答题技巧:准确把握加强、削弱的“相关性”...
  2. Struts1.2配置详解
  3. 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器
  4. Oracle dataguard 正常切换和应急切换
  5. 遇到问题--java--mac版本的idea在控制台中使用mvn命令not found
  6. 计算机指数函数符号,数学公式及符号大全
  7. Android实战开发--制作圆形头像(简易篇)
  8. 仿360悬浮窗——进阶篇
  9. 游戏手柄(JoyStick)编程学习笔记(1)
  10. Android:使用 Flutter 包创建 Xylophone 应用程序
  11. 你是天蝎座(10.24-11.22)的吗?
  12. matlab判断系统因果性,如何分析判断系统是否为稳定系统、因果系统、线性系统?...
  13. python画拓扑图权值是线条粗细_拓扑图线条流动效果
  14. 【数据产品案例】阿里XSigma智能客服调度平台
  15. error:Error parsing XML:unbound prefix
  16. 生产者与消费者问题?
  17. LeetCode 反转链表(C++)
  18. 如何绘制景区热力图_百度地图标注“景区热力图”让你拥有千里眼
  19. 64位Windows系统注册表的 32 位注册表项和64 位注册表项
  20. Centos7 处理挖矿病毒初探

热门文章

  1. 学了近一个月的java web 感想
  2. .net framework 25007 error
  3. scrapy item引用时报错
  4. npm run build,start
  5. Nginx 301跳转踩坑总结
  6. go的错误处理(异常捕获、处理):defer+recover机制处理错误、自定义异常(自定义错误)
  7. k8s资源清单:常用字段说明及pod增删查示例
  8. ElementUI弹出新增窗口
  9. nginx服务器远程无法访问,nginx首次安装远程无法访问
  10. java虚拟机类加载机制_《深入理解java虚拟机》学习笔记一/类加载机制