Linux内核原子操作及函数
所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。
原子操作需要硬件的支持,因此是架构相关的,其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内核原子操作及函数相关推荐
- Linux内核编程接口函数
Linux内核编程接口函数 转载请注明出处: http://blog.csdn.net/drivelinux/article/details/8656280 字符设备相关函数 1.alloc_chrd ...
- Linux内核-字符处理函数
索引 Linux内核-字符处理函数 函数概要 各函数用法说明 Linux内核-字符处理函数 声明:内容转自https://blog.csdn.net/zhangzhaocap/article/deta ...
- linux 内核flush,armv8(aarch64)linux内核中flush_dcache_all函数详细分析
/* * __flush_dcache_all() * Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...
- linux内核函数kmalloc,Linux内核内存分配函数之devm_kmalloc和devm_kzalloc
本文介绍Linux内核内存分配函数devm_kmalloc()和devm_kzalloc(). 一.devm_kmalloc 文件:drivers/base/devres.c,定义如下: /** * ...
- 【Linux】linux内核原子操作的实现
所谓原子操作,就是"不可中断的一个或一系列操作". 硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作&qu ...
- linux内核原子操作的实现
所谓原子操作,就是"不可中断的一个或一系列操作". 硬件级的原子操作:在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是"原子操作&qu ...
- linux内核原子操作使用简介
驱动开发住常见的一个问题:就是一个驱动可以被多个进程同时打开,使用,这样会导致驱动功能混乱. ./app & ./app & ./app 可以同时打开这个设备,可通过文件描述符调用 ...
- Linux 内核原子操作
本文主要介绍了原子操作的一些相关用法. 目录 文章目录 前言 一.原子操作 二.整型原子操作 1.设置原子变量的值 2.获取原子变量的值 3.原子变量加.减 4.原子变量自增.自减 5.操作 三.位原 ...
- linux内核第一个函数,通过内核源码看函数调用之前世今生 - 极光 - CSDN博客
通过内核源码看函数调用之前世今生 作者:杨小华 栈(Stack):一个有序的积累或堆积 韦氏词典 对每一位孜孜不倦的程序员来说,栈已深深的烙在其脑海中,甚至已经发生变异.栈可以用来传递函数参数.存储局 ...
- linux 内核 字符串转换函数
Linux内核中提供的一些字符串转换函数: lib/vsprintf.c unsigned long long simple_strtoull(const char *cp, char **endp, ...
最新文章
- python四大软件-PYPL 9月编程语言排行榜发布 Python一枝独秀
- Spring MVC-05循序渐进之数据绑定和form标签库(下) 实战从0到1
- 关于JQUery.parseJSON()函数的知识札记
- Mysql常用命令详解
- 实战dock安装和镜像的拉取
- XGB 调参基本方法
- 吐血整理!近二十年全国数学联赛赛题大全,烧脑全集来啦!
- win10+tomcat+php+配置环境变量配置,Win10系统Tomcat环境变量配置方法
- 配置Debian11服务器允许root用户远程SSH登录
- ABP理论之CSRF
- 机器学习代码实战——保存和加载模型(Save and Load Model)
- 朴素版的Dijkstra算法
- spring bean生命周期源码剖析
- 微信小程序之分包加载
- spring Boot手把手教学(8): 封装统一返回实体类
- windows计算机操作题,计算机等级考试Windows操作题
- 牙齿矫正价格降低一半,年轻人距离「牙套自由」还有多远?
- 排序算法大比拼(2.1)——时间O(n log2n)篇之归并排序
- 传智健康 第12章_PDF报表生成_JasperReports
- 统计英文字数c语言,用C语言作纯英文字数统计
热门文章
- iOS自己定义返回button(不影响返回手势)
- 【BZOJ 4503】4503: 两个串 (FFT)
- BS CS 优缺点比较 及 适应场合 (部分转载+个人见解)
- 智能客户端(Smart Client )中文文档及案例(转贴)
- 2.基于梯度的攻击——FGSM
- 输入法或搜索类软件评价
- OpenWrt加入iptables 支持过滤字符串
- centos6.9去掉网关地址后依然可以ping通外网
- Spring Boot中的默认日志logback
- netty LEAK: ByteBuf.release() was not called before it's garbage-collected