什么是原子操作?Linux下有哪些原子操作API
来源:互联网 发布:江恩正方软件 编辑:程序博客网 时间:2024/06/08 07:00
所谓的原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就是说,它的最小的执行单位,不能有比它更小的执行单元,因此这里的原子实际是使用了物理学里物质微粒的概念。
原子操作需要硬件的支持,因此是架构相关的,其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的指针。
原子操作需要硬件的支持,因此是架构相关的,其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的指针。
阅读全文
0 0
- 什么是原子操作?Linux下有哪些原子操作API
- Linux下原子操作函数
- 什么是原子性,什么是原子性操作?
- 什么是原子性,什么是原子性操作
- 什么是原子操作
- 什么是原子操作
- 什么是原子操作
- 什么是MongoDB原子操作
- 什么是原子操作
- 什么是原子操作?
- linux内核原子变量与原子位操作API
- Windows API 原子操作
- Linux 原子操作
- Linux原子操作
- linux 原子操作
- linux 原子操作
- linux原子操作
- Linux 原子操作
- 程序27
- 界面库
- Android 第三方轮播图控件ConvenientBanner:通用的广告栏控件
- 服务器Socket概述与实例
- JavaScript移动
- 什么是原子操作?Linux下有哪些原子操作API
- 程序28
- vector,map和set笔记
- 巧妙利用豆瓣,布局长尾关键词的暴
- unity 通过图片信息制作地形图
- 一键将Excel中的零0值快速隐藏不仅适用于当前表和当前区域
- jquery阻止事件冒泡及解决办法 live
- 剑指offer——二维数组的查找
- Excel工作表默认都是手动一个个表的修改内容如何批量一次性修改