atomic操作在kernel 源代码中是比较常见的,主要是防止读取的是寄存器的内容,而内存的值已经被其他线程改变,主要是因为多线程的原因。对于 PM 来说,主要是操作atomic struct 里的变量counter。

atomic_read

#define atomic_read(v) READ_ONCE((v)->counter)

atomic_set

#define atomic_set(v, i) WRITE_ONCE(((v)->counter), (i))

详细代码如下:

atomic_add_unless

atomic_add_unless函数的实现在arch/arm/include/asm/atomic.h中。
atomic_add_unless 这个feature是将新值存入atomic_t类型的变量,并把变量的旧值返回,函数实现如下:


__atomic_add_unless函数path:nclude/asm-generic/atomic.h,函数实现如下:

函数会事先判断a 值是否与传入atomic_t中的counter值相同,如果相同就返回旧的counter值;如果不同的话, 则会call 到atomic_cmpxchg, atomic_cmpxchg 位于
arch/sparc/lib/atomic32.c, 函数实现如下:

该函数用于判断,旧值counter是否和old 相同,如果相同,就会把旧counter 值和 a 的相加之后的值赋值给counter,并且返回旧counter值;如果不相同,就直接返回旧counter值。基本上两次循环就会实现counter值被更新。

linux 学习笔记之atomic相关推荐

  1. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  2. (零)我为什么要写Linux学习笔记?

    我对Linux有强烈的好奇心,兴趣:写学习笔记会让我有成就感:我记忆力实在不好.好吧,其实真正原因是:如果我能把自己学到的知识简明扼要的讲出来,写出来,那便证明我真的学懂了我想学的知识.没时间怎么办? ...

  3. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库

    Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...

  4. Linux 学习笔记之超详细基础linux命令 Part 3

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...

  5. Linux学习笔记(二)|常用命令

    Linux学习笔记(二)常用命令 1.文件处理命令 1.1命令格式与目录处理 -ls 功能描述:显示目录文件 原意:list 所在路径:/bin/ls 语法: ls-a 显示所有文件,包括隐藏文件 l ...

  6. Linux学习笔记(一)|目录结构

    Linux学习笔记(一) #一.Linux的目录结构 Linux采用层级式的树状目录结构,根目录为"/",在此目录下创建其他目录. /lib 系统开机所需要最基本的动态链接共享库 ...

  7. 20155303狄惟佳预备作业三Linux学习笔记

    20155303狄惟佳预备作业三Linux学习笔记 初次接触Ubuntu系统以及Linux内核,了解了其产生的历史,从感性来讲,深深吸引我的是其中蕴含的珍贵的开源精神,以及Stallman等人对&qu ...

  8. Linux学习笔记-文件权限与路径

    Linux学习笔记-文件与目录 目前从电子信息科学与技术转到了计算机专业,因此想趁着大四比较闲的时候补一些计算机的知识.我想说:你好,生活[斜眼笑]!愿生活温柔以待!哈哈,这是我写的第一篇博客,谨以此 ...

  9. LINUX学习笔记共五部分

    LINUX学习笔记1--LINUX系统命令 1.         界面切换: a)         进入字符界面:按住ctrl+alt+F1: 1.         首先需要进入用户登入,输入用户名和 ...

最新文章

  1. 求两个数集的并集C++代码实现
  2. 正则化、交叉验证、泛化能力
  3. 云原生人物志|Pulsar翟佳:社区的信任最重要
  4. python和环境变量_python 读取和设置环境变量
  5. 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
  6. 网页报错404:The origin server did not find 的原因(持续更新带图并总结了其他博客的内容)
  7. python 趋势线表达式_python添加趋势线
  8. 广东工业大学华立学院c语言试题,广东工业大学华立学院考试试卷《高频电子线路》-2015.doc...
  9. 小学计算机微课教案及ppt,小学数学微课程ppt
  10. 关于 C/S模式,B/S模式,P2P模式
  11. Docker容器化开发
  12. 关于嵌入式EMW3162 Wifi模块的网络配置与测试
  13. 翻译连载 | JavaScript轻量级函数式编程-第 8 章:列表操作 |《你不知道的JS》姊妹篇
  14. numpy_isfinite函数
  15. 手机NFC是什么?怎么使用?
  16. 爬虫笔记——东方财富科创板数据爬取(requests方法)
  17. “泰迪杯”挑战赛 - 通过Java实现中央空调系统的数据分析与控制策略
  18. 【粉丝福利】赠《机器学习算法竞赛实战》10 本书
  19. Markdown的简单使用方法
  20. JS中去除手机端的alert弹框中的关闭网页功能

热门文章

  1. 卡西欧数码相机上的照片误删了怎么弄
  2. 解决vue hash模式微信分享#号问题
  3. LVS为何不能完全替代DNS轮询
  4. 现代opengl 设计入门,坐标系统和立方体的纹理贴图
  5. 目录前导符不一致解决办法
  6. STM32电子时钟 WATCHX-NWATCH( 开源)
  7. nvm安装以及nvm安装之后报错npm/node不是内部外部命令,nvm use 报错乱码
  8. Win7运行窗口的打开方法
  9. AutoCAD进行卫星影像配准套合
  10. 无线运动耳机需求分析