所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。

原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/sam/atomic.h文件中,它们都是使用汇编语言实现,因为c语言并不能实现这样的操作。

原子操作主要用来实现资源计数,很多引用计数就是通过原子操作实现的。
typedef struct {int counter;}atomic_t;

(1)atomic_read(atomic_t *v)
该函数对原子类型的变量进行原子读操作,它返回原子类型的变量v的值。

(2)atomic_set(atomic_t *v,int i);
该函数设置原子类型的变量v的值为i。

(3)atomic_add(int i, atomic_t *v);
该函数给原子类型变量v增加i。

(4)atomic_sub(int i, atomic_t *v);
该函数给原子类型变量v减去i。

(5)atomic_sub_and_test(int i, atomic_t *v);
该函数从原子类型的变量v中减去i,并判断结果是否是0,如果为0,返回真,否则返回假。

(6) atomic_inc(atomic_t *v);
该函数对原子变量v原子的增加1。

(7)atomic_dec(atomic_t *v);
该函数对原子变量v原子的减少1。

(8)atomic_dec_and_test(atomic_t *v);
该函数对原子类型的变量v原子的减少1,并判断结果是否是0,如果是0,返回真,否则返回假。

(9)atomic_inc_and_test(atomic_t *v);
该函数对原子类型的变量v原子增加1,并判断结果是否是0,如果是0,返回真,否则返回假。

(10)atomic_add_negative(int i, atomic_t *v);
该函数对原子类型的变量v原子的增加I,并判断结果是否是负数,如果是,返回真,否则返回假。

(11)atomic_add_return(int i, atomic_t *v);
该函数对原子类型的变量v原子的增加i,并且返回指向v的指针。

(12)atomic_sub_return(int i, atomic_t *v);
该函数对原子累心的变量v中减去i,并且返回指向v的指针。

Linux内核原子操作及函数相关推荐

  1. Linux内核编程接口函数

    Linux内核编程接口函数 转载请注明出处: http://blog.csdn.net/drivelinux/article/details/8656280 字符设备相关函数 1.alloc_chrd ...

  2. Linux内核-字符处理函数

    索引 Linux内核-字符处理函数 函数概要 各函数用法说明 Linux内核-字符处理函数 声明:内容转自https://blog.csdn.net/zhangzhaocap/article/deta ...

  3. linux 内核flush,armv8(aarch64)linux内核中flush_dcache_all函数详细分析

    /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...

  4. linux内核函数kmalloc,Linux内核内存分配函数之devm_kmalloc和devm_kzalloc

    本文介绍Linux内核内存分配函数devm_kmalloc()和devm_kzalloc(). 一.devm_kmalloc 文件:drivers/base/devres.c,定义如下: /** * ...

  5. 【Linux】linux内核原子操作的实现

    所谓原子操作,就是"不可中断的一个或一系列操作". 硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作&qu ...

  6. linux内核原子操作的实现

    所谓原子操作,就是"不可中断的一个或一系列操作". 硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作&qu ...

  7. linux内核原子操作使用简介

    驱动开发住常见的一个问题:就是一个驱动可以被多个进程同时打开,使用,这样会导致驱动功能混乱. ./app & ./app & ./app   可以同时打开这个设备,可通过文件描述符调用 ...

  8. Linux 内核原子操作

    本文主要介绍了原子操作的一些相关用法. 目录 文章目录 前言 一.原子操作 二.整型原子操作 1.设置原子变量的值 2.获取原子变量的值 3.原子变量加.减 4.原子变量自增.自减 5.操作 三.位原 ...

  9. linux内核第一个函数,通过内核源码看函数调用之前世今生 - 极光 - CSDN博客

    通过内核源码看函数调用之前世今生 作者:杨小华 栈(Stack):一个有序的积累或堆积 韦氏词典 对每一位孜孜不倦的程序员来说,栈已深深的烙在其脑海中,甚至已经发生变异.栈可以用来传递函数参数.存储局 ...

  10. linux 内核 字符串转换函数

    Linux内核中提供的一些字符串转换函数: lib/vsprintf.c unsigned long long simple_strtoull(const char *cp, char **endp, ...

最新文章

  1. python四大软件-PYPL 9月编程语言排行榜发布 Python一枝独秀
  2. Spring MVC-05循序渐进之数据绑定和form标签库(下) 实战从0到1
  3. 关于JQUery.parseJSON()函数的知识札记
  4. Mysql常用命令详解
  5. 实战dock安装和镜像的拉取
  6. XGB 调参基本方法
  7. 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
  8. win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
  9. 配置Debian11服务器允许root用户远程SSH登录
  10. ABP理论之CSRF
  11. 机器学习代码实战——保存和加载模型(Save and Load Model)
  12. 朴素版的Dijkstra算法
  13. spring bean生命周期源码剖析
  14. 微信小程序之分包加载
  15. spring Boot手把手教学(8): 封装统一返回实体类
  16. windows计算机操作题,计算机等级考试Windows操作题
  17. 牙齿矫正价格降低一半,年轻人距离「牙套自由」还有多远?
  18. 排序算法大比拼(2.1)——时间O(n log2n)篇之归并排序
  19. 传智健康 第12章_PDF报表生成_JasperReports
  20. 统计英文字数c语言,用C语言作纯英文字数统计

热门文章

  1. iOS自己定义返回button(不影响返回手势)
  2. 【BZOJ 4503】4503: 两个串 (FFT)
  3. BS CS 优缺点比较 及 适应场合 (部分转载+个人见解)
  4. 智能客户端(Smart Client )中文文档及案例(转贴)
  5. 2.基于梯度的攻击——FGSM
  6. 输入法或搜索类软件评价
  7. OpenWrt加入iptables 支持过滤字符串
  8. centos6.9去掉网关地址后依然可以ping通外网
  9. Spring Boot中的默认日志logback
  10. netty LEAK: ByteBuf.release() was not called before it's garbage-collected