OS / 理论 / 什么是原子操作?
- 英文:atomic operation 。
- 定义:一组不会被线程调度机制打断的操作,即:一旦该操作开始,就一直运行到结束,中间不会有任何上下文切换到另一个线程。
- 拓展
(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 / 理论 / 什么是原子操作?相关推荐
- 考研OS备考|计算机操作系统|汤小丹慕课版|课后习题答案|复试拓展
本文主要是考研复试备考自用,所以课后习题答案主要是简答题部分,此外还有其他的简答补充.如果发现有误,欢迎在评论区或者私信指出. 计算机操作系统|汤小丹慕课版|课后习题答案|考研备考 第1章 操作系统引 ...
- 八年程序员之书籍篇--OS/Linux(二):Kernel
谈到Linux Kernel书籍,首先得提以下几本: 1.<Linux Kernel Development>-<Linux内核设计与实现>-Robert Love-陈莉君/康 ...
- Linux内核设计与实现 原书第3版中文版pdf
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 下载地址 ...
- 《操作系统》期末主观题梳理
操作系统简答题 文章目录 操作系统简答题 第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 第一章 在计算机系统上配置OS(operating system, 操作系统)的目标是 ...
- 2022新年重磅技术分享|深入理解Linux操作系统
hi 大家好,这里是极客重生,愿2021所有的遗憾都是2022惊喜的铺垫,前路浩浩荡荡,万事尽可期待,祝大家新的一年付出都有收获! 这次分享的主题是: 如何掌握和精通一门技术 如何学习和攻破操作系统 ...
- 计算机相关经典书籍推荐
1.Java程序设计教程实验手册(翻译版) 目前为止,<Java程序设计教程实验手册(翻译版) >这本书是我见过的最好的编程书.从第一章到第十章,里面的所有习题都做一遍.当你做完了这些,你 ...
- 计算机及相关经典书籍收集
1.Java程序设计教程实验手册(翻译版) 目前为止,<Java程序设计教程实验手册(翻译版) >这本书是我见过的最好的编程书.从第一章到第十章,里面的所有习题都做一遍.当你做完了这些,你 ...
- C语言推荐书籍从入门到进阶带你走上大牛之路(珍藏版)
首先是关于学习技术书籍的一些心得,很多人给我留言说看不下去书,想看视频学习,我不反对看视频学习,但是编程作为一门需要不断钻研的技术,只靠看视频是注定不可能成为专家的,还是得从经典的书籍中汲取知识,再加 ...
- Linux 【进程】
目录 1.冯诺依曼体系结构(硬件结构) 冯诺依曼结构计算机的基本工作原理是什么? 举例说明数据的流动过程 2.操作系统简述 总结:先描述,再组织 3.进程 4.通过代码创建子进程:fork 进程终止 ...
最新文章
- 利用计算机解决问题实际依赖,行测答题技巧:准确把握加强、削弱的“相关性”...
- Struts1.2配置详解
- 为什么Kubernetes要引入pod的概念,而不直接操作Docker容器
- Oracle dataguard 正常切换和应急切换
- 遇到问题--java--mac版本的idea在控制台中使用mvn命令not found
- 计算机指数函数符号,数学公式及符号大全
- Android实战开发--制作圆形头像(简易篇)
- 仿360悬浮窗——进阶篇
- 游戏手柄(JoyStick)编程学习笔记(1)
- Android:使用 Flutter 包创建 Xylophone 应用程序
- 你是天蝎座(10.24-11.22)的吗?
- matlab判断系统因果性,如何分析判断系统是否为稳定系统、因果系统、线性系统?...
- python画拓扑图权值是线条粗细_拓扑图线条流动效果
- 【数据产品案例】阿里XSigma智能客服调度平台
- error:Error parsing XML:unbound prefix
- 生产者与消费者问题?
- LeetCode 反转链表(C++)
- 如何绘制景区热力图_百度地图标注“景区热力图”让你拥有千里眼
- 64位Windows系统注册表的 32 位注册表项和64 位注册表项
- Centos7 处理挖矿病毒初探