跳转至

atomic

atomic 提供 OSAL (Operating System Abstraction Layer) 原子操作功能,支持多线程与中断环境下对整型变量的原子读取、设置、自增自减及条件自增等操作,确保操作过程不可被打断。

头文件清单

#include "include/osal/atomic/osal_atomic.h"

接口清单

接口名称 功能简述
osal_atomic_read 原子读取原子变量的值
osal_atomic_set 原子设置原子变量的值
osal_atomic_inc_return 原子自增并返回自增后的结果
osal_atomic_add_return 原子加指定值并返回增加后的结果
osal_atomic_dec_return 原子自减并返回自减后的结果
osal_atomic_inc 原子自增,无返回值
osal_atomic_sub 原子减指定值,无返回值
osal_atomic_dec 原子自减,无返回值
osal_atomic_add 原子加指定值,无返回值
osal_atomic_dec_and_test 原子自减并测试结果是否为0
osal_atomic_inc_and_test 原子自增并测试结果是否为0
osal_atomic_inc_not_zero 原子自增(仅当值非零时),返回是否执行了自增

Functions

osal_atomic_read

int osal_atomic_read(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子读取原子变量的当前值,返回读取结果
  • 读取操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待读取的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
>= 0 原子变量当前值 读取成功
-1 参数无效 atomic 为 NULL

osal_atomic_set

void osal_atomic_set(osal_atomic *atomic, int i)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子设置原子变量的值为指定值
  • 设置操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待设置的原子变量指针 非NULL
i int 待设置的目标值 INT_MIN ~ INT_MAX

osal_atomic_inc_return

int osal_atomic_inc_return(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自增1并返回自增后的结果
  • 自增操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自增的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
>= 0 自增后的原子变量值 自增成功
-1 参数无效 atomic 为 NULL

osal_atomic_add_return

int osal_atomic_add_return(osal_atomic *atomic, int count)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子加指定值并返回增加后的结果
  • 加操作具有原子性,不会被其他线程/中断打断
  • 支持 freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待操作的原子变量指针 非NULL
count int 待增加的数值 INT_MIN ~ INT_MAX

返回值

  • 返回类型:int
返回值 文字含义 触发场景
整数值 增加后的原子变量值 操作成功

osal_atomic_dec_return

int osal_atomic_dec_return(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自减1并返回自减后的结果
  • 自减操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自减的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
>= 0 自减后的原子变量值 自减成功
-1 参数无效 atomic 为 NULL

osal_atomic_inc

void osal_atomic_inc(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自增1,无返回值
  • 自增操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自增的原子变量指针 非NULL

osal_atomic_sub

void osal_atomic_sub(osal_atomic *atomic, unsigned int count)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子减指定值,无返回值
  • 减操作具有原子性,不会被其他线程/中断打断
  • 支持 freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待操作的原子变量指针 非NULL
count unsigned int 待减少的数值 0 ~ UINT_MAX

osal_atomic_dec

void osal_atomic_dec(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自减1,无返回值
  • 自减操作具有原子性,不会被其他线程/中断打断
  • 支持 linux、liteos、freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自减的原子变量指针 非NULL

osal_atomic_add

void osal_atomic_add(osal_atomic *atomic, int count)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子加指定值,无返回值
  • 加操作具有原子性,不会被其他线程/中断打断
  • 支持 freertos 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 freertos 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待操作的原子变量指针 非NULL
count int 待增加的数值 INT_MIN ~ INT_MAX

osal_atomic_dec_and_test

int osal_atomic_dec_and_test(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自减1并测试结果是否为0,若为0返回true,否则返回false
  • 自减与测试操作具有原子性,不会被其他线程/中断打断
  • 支持 linux 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 linux 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自减测试的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
1 自减后结果为0 原子变量自减1后等于0
0 自减后结果不为0 原子变量自减1后不等于0
-1 参数无效 atomic 为 NULL

osal_atomic_inc_and_test

int osal_atomic_inc_and_test(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 原子自增1并测试结果是否为0,若为0返回true,否则返回false
  • 自增与测试操作具有原子性,不会被其他线程/中断打断
  • 支持 linux 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 linux 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待自增测试的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
1 自增后结果为0 原子变量自增1后等于0(溢出场景)
0 自增后结果不为0 原子变量自增1后不等于0

osal_atomic_inc_not_zero

int osal_atomic_inc_not_zero(osal_atomic *atomic)

头文件清单

#include "include/osal/atomic/osal_atomic.h"

功能说明

  • 仅当原子变量值非零时执行原子自增1,返回是否执行了自增操作
  • 若原子变量值为0则不执行自增,返回false
  • 支持 linux 系统

前置条件

  • 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
  • 上下文限制:当前接口仅在 linux 系统环境下可用

入参

名称 参数类型 详细说明 约束取值范围
atomic osal_atomic * 指向待条件自增的原子变量指针 非NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
1 执行了自增操作 原子变量非零,自增成功
0 未执行自增操作 原子变量值为0,不执行自增

Structures

osal_atomic

typedef struct {
    volatile int counter;
} osal_atomic;

成员说明

成员名称 数据类型 描述
counter volatile int 原子计数值,所有原子操作均基于此成员