atomic
atomic 提供 OSAL (Operating System Abstraction Layer) 原子操作功能,支持多线程与中断环境下对整型变量的原子读取、设置、自增自减及条件自增等操作,确保操作过程不可被打断。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| 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
头文件清单
功能说明
- 原子读取原子变量的当前值,返回读取结果
- 读取操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待读取的原子变量指针 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| >= 0 | 原子变量当前值 | 读取成功 |
| -1 | 参数无效 | atomic 为 NULL |
osal_atomic_set
头文件清单
功能说明
- 原子设置原子变量的值为指定值
- 设置操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待设置的原子变量指针 | 非NULL |
| i | int | 待设置的目标值 | INT_MIN ~ INT_MAX |
osal_atomic_inc_return
头文件清单
功能说明
- 原子自增1并返回自增后的结果
- 自增操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待自增的原子变量指针 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| >= 0 | 自增后的原子变量值 | 自增成功 |
| -1 | 参数无效 | atomic 为 NULL |
osal_atomic_add_return
头文件清单
功能说明
- 原子加指定值并返回增加后的结果
- 加操作具有原子性,不会被其他线程/中断打断
- 支持 freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口仅在 freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待操作的原子变量指针 | 非NULL |
| count | int | 待增加的数值 | INT_MIN ~ INT_MAX |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 整数值 | 增加后的原子变量值 | 操作成功 |
osal_atomic_dec_return
头文件清单
功能说明
- 原子自减1并返回自减后的结果
- 自减操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待自减的原子变量指针 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| >= 0 | 自减后的原子变量值 | 自减成功 |
| -1 | 参数无效 | atomic 为 NULL |
osal_atomic_inc
头文件清单
功能说明
- 原子自增1,无返回值
- 自增操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待自增的原子变量指针 | 非NULL |
osal_atomic_sub
头文件清单
功能说明
- 原子减指定值,无返回值
- 减操作具有原子性,不会被其他线程/中断打断
- 支持 freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口仅在 freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待操作的原子变量指针 | 非NULL |
| count | unsigned int | 待减少的数值 | 0 ~ UINT_MAX |
osal_atomic_dec
头文件清单
功能说明
- 原子自减1,无返回值
- 自减操作具有原子性,不会被其他线程/中断打断
- 支持 linux、liteos、freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口在 linux、liteos、freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待自减的原子变量指针 | 非NULL |
osal_atomic_add
头文件清单
功能说明
- 原子加指定值,无返回值
- 加操作具有原子性,不会被其他线程/中断打断
- 支持 freertos 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口仅在 freertos 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待操作的原子变量指针 | 非NULL |
| count | int | 待增加的数值 | INT_MIN ~ INT_MAX |
osal_atomic_dec_and_test
头文件清单
功能说明
- 原子自减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
头文件清单
功能说明
- 原子自增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
头文件清单
功能说明
- 仅当原子变量值非零时执行原子自增1,返回是否执行了自增操作
- 若原子变量值为0则不执行自增,返回false
- 支持 linux 系统
前置条件
- 入参 atomic 指针不为 NULL,且指向已初始化的 osal_atomic 变量
- 上下文限制:当前接口仅在 linux 系统环境下可用
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| atomic | osal_atomic * | 指向待条件自增的原子变量指针 | 非NULL |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| 1 | 执行了自增操作 | 原子变量非零,自增成功 |
| 0 | 未执行自增操作 | 原子变量值为0,不执行自增 |
Structures
osal_atomic
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| counter | volatile int | 原子计数值,所有原子操作均基于此成员 |