`
paganini0102
  • 浏览: 3539 次
  • 性别: 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_锁_原子_自旋

    在Linux操作系统中,锁、原子操作和自旋锁是内核并发控制的重要机制,用于确保多线程环境下的数据一致性与正确性。这些概念在构建高效、可靠的并发程序时至关重要。 **1. Linux锁** Linux内核中的锁主要用于保护...

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

    在Linux系统中,原子操作(Atomic Operations)是编程中一种重要的技术,特别是在多线程和并发环境下,确保数据的一致性和完整性。它们提供了一种在不使用锁的情况下更新变量的方法,避免了竞态条件和死锁的问题。在...

    Linux原子加锁中关于SMP的困惑.docx

    Linux原子加锁中关于SMP的困惑 在 Linux 系统中,原子加锁是指在多处理器系统(Symmetric Multi-Processor,SMP)结构中,确保多个处理器之间的加锁操作的原子性。也就是说,在多个处理器之间,锁的操作必须是原子...

    Linux内核同步机制

    在 Linux 下,内核中常用的同步机制包括:原子操作、自旋锁和信号量。 1. 原子操作 原子操作就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位。...

    正点原子的linux驱动教程

    ### 正点原子的Linux驱动教程知识点概览 #### 一、I.MX6U嵌入式Linux驱动开发概述 **知识点1:I.MX6U系列处理器介绍** - **特性**:NXP的i.MX 6UltraLite (i.MX6UL)是一款低功耗、高性能的应用处理器,广泛应用于...

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

    Linux 驱动并发控制之位原子操作 本文主要讲述 Linux 驱动并发控制中的位原子操作,包括其原理、常用的位原子操作函数、设备注册、驱动源码文件等。 一、位原子操作的原理 位原子操作是利用位操作来实现并发控制...

    正点原子STM32P1开发板Linux驱动教程

    ### 正点原子STM32P1开发板Linux驱动教程知识点概述 #### 一、STM32MP1嵌入式Linux驱动开发基础 **STM32MP1**是一款基于ARM Cortex-A7双核处理器和Cortex-M4微控制器内核的高度集成的微处理器。它融合了高性能应用...

    正点原子Uboot和linux源码

    在给定的压缩包文件中,“正点原子Uboot和Linux出厂源码”提供了用于正点原子硬件平台的引导加载程序(UBoot)和Linux内核的源代码。这个资源对于想要深入理解嵌入式系统工作原理,或者需要定制和优化系统的人来说是...

    【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4

    《【正点原子】I.MX6U 嵌入式 Linux C 应用编程指南 V1.4》 本资源为嵌入式 Linux C 应用编程指南,基于 I.MX6U 微处理器,旨在帮助开发者快速上手嵌入式 Linux 应用开发。该指南涵盖了嵌入式 Linux 的基本概念、...

    原子操作、信号量、读写信号量和自旋锁的API

    本文详细介绍了Linux内核中的原子操作、信号量、读写信号量和自旋锁的API及其应用场景。这些同步机制对于确保多线程或多处理器系统的正确性和稳定性至关重要。理解并正确使用这些同步机制可以帮助开发者构建出更加...

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

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

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

    标题“zynq的linux驱动5-使用原子操作实现mio资源的竞争保护”表明我们将讨论如何通过使用原子操作来防止MIO(Multipurpose Input/Output)资源在多个进程间的竞争条件。描述进一步强调了目标,即在同一时刻只允许一...

    【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0-尝鲜版.pdf

    【正点原子】I.MX6U嵌入式Linux驱动开发指南是一份详细的教程,针对的是基于I.MX6ULL处理器的嵌入式Linux开发。该文档由广州市星翼电子科技有限公司出版,提供了正点原子ALPHA开发板的使用指导。正点原子团队致力于...

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

    《I.MX6U嵌入式Linux驱动开发指南》是正点原子团队为使用I.MX6U处理器进行嵌入式Linux驱动开发的工程师提供的学习资料。该指南分为多个部分,覆盖了从Ubuntu系统的基础操作到Linux内核驱动开发的全过程。接下来,...

    imx6ull嵌入式linux驱动开发指南pdf(正点原子)

    * Linux 操作系统的架构 * 嵌入式 Linux 的发展历史 2. i.MX6ULL 硬件平台介绍 * i.MX6ULL 处理器的架构 * i.MX6ULL 的 peripheral 接口 * i.MX6ULL 的存储结构 3. Linux 驱动开发基础知识 * Linux 驱动程序的...

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

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

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

    《I.MX6U嵌入式Linux驱动开发指南V1.1.pdf》是正点原子发布的一本专门针对I.MX6U处理器的嵌入式Linux驱动开发教程。该书详细介绍了如何在基于NXP(原飞思卡尔)I.MX6U微处理器的系统上进行Linux驱动程序的开发与调试...

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

    根据提供的文件信息,以下是对《正点原子 I.MX6U嵌入式Linux驱动开发指南 V1.2》中知识点的详细说明: ### 知识点一:文档概览与资源获取 该指南是一份关于I.MX6U嵌入式Linux驱动开发的全面文档,由正点原子团队...

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

    在代码开发方面,原子哥在线教学平台提供了原子哥APP,方便用户下载观看相关视频教程,以视频形式学习驱动开发的知识点和实验操作步骤。 整体而言,这份指南是一个非常适合初学者和有经验开发者的资源,从基础知识...

    正点原子配套源码2linux.rar

    "正点原子配套源码2linux.rar" 是一个压缩包文件,主要包含的是与"正点原子"相关的Linux操作系统开发的源代码。正点原子是一家知名的嵌入式系统开发培训机构,他们提供各种教程和实践项目,帮助学习者掌握Linux系统...

Global site tag (gtag.js) - Google Analytics