• RTOS编程中的原子操作


    RTOS编程中的原子操作

    一、什么是原子操作

            原子操作(Atomic operation)是指一种不可分割的操作,在整个操作过程中都不会被打断。

    二、为什么需要原子操作

            在一些可能 会被系统调度、中断等事件打断的场景的编程中,我们需要原子操作的支持来保障操作的原子性

            同时原子操作还可以在多线程编程中,保障多线程间的并发执行不出现数据竞争问题;在一些程序的同步、并发控制中,提供有效支撑。

            在RTOS编程中,为了实现对临界区资源进行保护,常规的会通过 开关全局中断,调度器上锁等方式来进行处理。如果采用原子操作来替代这些处理,就能够大幅度提高临界区代码的执行效率、提升系统的运行效率,降低编程的复杂度。

    三、RTOS是如何支持原子操作的

            一般来说RTOS为了实现原子操作支持,都会借助芯片平台的硬件指令来进行,并为用户侧提供原子操作函数来供用户使用。

            因为RTOS的原子操作支持依赖具体平台的原子操作指令与相关指令来实现,所以哪些平台有该支持呢?常规来说,采用ARM指令集的绝大多数内核、采用 RV32 指令集的大部分内核、采用 RV64 指令集的大部分内核都提供原子操作支持。

    • 硬实现:

            所谓硬实现就是使用与具体平台(aarch64、arm、riscv)紧密相关的具体原语指令进行操作,如:aarch64中的LSE扩展和ldxr、stxr;arm中的同步原语(ldrex、ldrexb、ldrexh、ldrexd、strex、strexb、strexh、strexd);riscv中的amo指令(amoswap、amoadd、amoand、amoor、amoxor、amomx、amomaxu、amomin、amominu)。

    • 软实现:

            所谓软实现就是通过软件关中断的方式对操作段进行保护,操作结束后再开启中断。

     

     

     

  • 相关阅读:
    leetcode:476. 数字的补数
    k8s-10 cni 网络
    Hive 表 DML 操作——Hive 表 DML 操作——第1关:将文件中的数据导入(Load)到 Hive 表中
    qt mingw 生成DUMP文件,和pdb文件
    oracle SQL
    【halcon案例01 】金属工件几何测量
    C语言——分支语句和循环语句
    golang gin 监听rabbitmq队列无限消费
    【Aseprite】像素画背景制作
    这10张图拿去,别再说学不会RecyclerView的缓存复用机制了!
  • 原文地址:https://blog.csdn.net/smallerxuan/article/details/134095785