`
paganini0102
  • 浏览: 3382 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Linux 原子操作

 
阅读更多
一、原子操作(atomic)
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际
是使用了物理学里的物质微粒的概念。
原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语
言并不能实现这样的操作。
原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:<Linux/types.h>
typedef struct
{
  volatile int counter;
}atomic_t;
volatile修饰字段告诉gcc不要对该类型的数据做优化处理,对它的访问都是对内存的访问,而不是对寄存器的访问。
原子操作API包括:
atomic_read(atomic_t *v); 该函数对原子类型的变量进行原子读操作,它返回原子类型的变量v的值。
atomic_set(atomic_t *v, int i);该函数设置原子类型的变量v的值为i。
void atomic_add(int i, atomic_t *v);该函数给原子类型的变量v增加值i。
atomic_sub(int i, atomic_t *v);该函数从原子类型的变量v中减去i。
int atomic_sub_and_test(int i, atomic_t *v);该函数从原子类型的变量v中减去i,并判断结果是否为0,如果为0,返回真,否则返回假。
void atomic_inc(atomic_t *v);该函数对原子类型变量v原子地增加1。
void atomic_dec(atomic_t *v);该函数对原子类型变量v原子地减1。
int atomic_dec_and_test(atomic_t *v);该函数对原子类型的变量v原子地减1,并判断结果是否为0,如果为0,返回真,否则返回假。
int atomic_inc_and_test(atomic_t  *v);该函数对原子类型的变量v原子地增加1,并判断结果是否为0,如果为0,返回真,否则返回假。
int atomic_add_negative(int i, atomic_t *v);该函数对原子类型的变量v原子地增加I,并判断结果是否为负数,如果是,返回真,否则返回假。
int atomic_add_return(int i, atomic_t *v);该函数对原子类型的变量v原子地增加i,并且返回指向v的指针。
int atomic_sub_return(int i, atomic_t *v);该函数从原子类型的变量v中减去i,并且返回指向v的指针。
int atomic_inc_return(atomic_t *v);该函数对原子类型的变量v原子地增加1并且返回指向v的指针。
int atomic_dec_return(atomic_t *v);该函数对原子类型的变量v原子地减1并且返回指向v的指针。
分享到:
评论

相关推荐

    linux下原子操作程序源码.zip

    linux下原子操作程序源码

    【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.2.pdf

    第一篇: Ubuntu 操作系统入门 本篇主要讲解 Ubuntu 操作系统的使用,本篇不涉及到任何嵌入式方面的知识,全部是在 PC 上完成的,只要安装好 Ubuntu 操作系统即可。 第二篇: ARM 裸机开发 从本篇开始我们就正式...

    详解C++11原子类型与原子操作

    通常情况下原子操作可以通过互斥的访问方式来保证,例如Linux下的互斥锁(mutex),Windows下的临界区(Critical Section)等。下面看一个Linux环境使用POSIX标准的pthread库实现多线程下的原子操作: #include #...

    Linux驱动并发控制之位原子操作.pdf

    Linux驱动并发控制之位原子操作.pdf

    Linux内核同步机制

    内核很容易产生竞争条件。同一时间可能有多个内核执行流在执行,内核的许多特性都要求能够并发地访问共享数据,这就要求有同步机制来同步各执行单元对共享数据的访问以保证不出现竞争条件

    zynq的linux驱动5-使用原子操作实现mio资源的竞争保护

    zynq的linux驱动5-使用原子操作实现mio资源的竞争保护,同一时刻只有一个进程使用mio

    清华大学Linux操作系统原理与应用

    7.2.1 原子操作 153 7.2.2 自旋锁 155 7.2.3 信号量 156 7.3 并发控制实例 157 7.3.1 内核任务及其并发关系 158 7.3.2 实现机制 158 7.3.3 关键代码解释 162 7.3.4 实现步骤 163 习题7 164 第8章 文件系统 165 8.1 ...

    Linux应用程序之线程通信

    线程基础代码,适合初学者阅读理解。包括原子操作,自旋锁

    linux操作系统内核技术-uestc课件

     7掌握内核同步原理和方法:原子操作,自旋锁,(读—写)信号量,完成变量,bkl,seqlock和延迟内核抢占。了解指令“路障”。(4小时)  8介绍系统时钟和硬件定时器,单处理器和多处理器上的linux计时体系结构,...

    c++基础封装(线程、锁、定时器、原子操作等)

    c++基础封装(线程、锁、定时器、原子操作等),c++封装,接口方便好用。

    atomic_ops.pdf

    描述了linux系统原子操作的实现以及使用原子操作时的注意事项。

    嵌入式linux内核学习资料

    Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第...【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.pdf&gt;&gt; &lt;&lt;LINUX内核设计与实现.pdf &gt;&gt; &lt;&lt;LINUX设备驱动程序(第3版).pdf&gt;&gt;

    linux内核调试方法总结

    2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_stack() 五 printk() 1 printk函数的健壮性 2 printk函数脆弱之处 3 LOG等级 4 记录缓冲区 5 syslogd/klogd 6 dmesg 7 注意 8 内核printk和日志系统...

    linux并发与竞争.pptx

    讲解linux下驱动开发,并发与竞争发生的原理,以及原子操作,自旋锁,信号量,互斥体的使用。ppt纯手工制作,希望对大家有所帮助。

    嵌入式Linux设备驱动程序实例详解.pdf

    嵌入式Linux设备驱动程序实例详解.pdf

    嵌入式Linux中的进程同步无竞态读写.pdf

    嵌入式Linux中的进程同步无竞态读写.pdf

    Linux2.6内核标准教程(共计8-- 第1个)

    Linux内核是Linux操作系统中最核心的部分,用于实现对硬件部件的编程控制和接口操作。《Linux2.6内核标准教程》深入、系统地讲解了 Linux内核的工作原理,对Linux内核的核心组件逐一进行深入讲解。 全书共8章,首先...

    Linux编程从入门到精通

    6.2.4 管道的原子操作 233 6.2.5 关于半双工管道需要注意的几个 问题 233 6.3 命名管道 234 6.3.1 基本概念 234 6.3.2 创建FIFO 234 6.3.3 FIFO操作 235 6.3.4 FIFO上的阻塞动作 236 6.3.5 SIGPIPE信号 237 6.4 ...

    LINUX编程白皮书 (全集)

    6.2.4 管道的原子操作 233 6.2.5 关于半双工管道需要注意的几个 问题 233 6.3 命名管道 234 6.3.1 基本概念 234 6.3.2 创建FIFO 234 6.3.3 FIFO操作 235 6.3.4 FIFO上的阻塞动作 236 6.3.5 SIGPIPE信号 237 6.4 ...

Global site tag (gtag.js) - Google Analytics