wait
wait 提供等待队列的初始化、条件等待、超时等待、唤醒与销毁功能,用于线程间的同步与事件通知。
头文件清单
接口清单
| 接口名称 | 功能简述 |
|---|---|
| osal_wait_init | 初始化等待队列 |
| osal_wait_interruptible | 可中断方式等待条件为真 |
| osal_wait_uninterruptible | 不可中断方式等待条件为真 |
| osal_wait_timeout_interruptible | 可中断方式等待条件为真或超时 |
| osal_wait_timeout_uninterruptible | 不可中断方式等待条件为真或超时 |
| osal_wait_wakeup | 唤醒等待队列上的所有线程 |
| osal_wait_wakeup_interruptible | 唤醒等待队列上的可中断线程 |
| osal_wait_destroy | 销毁等待队列 |
Functions
osal_wait_init
头文件清单
功能说明
- 初始化等待队列,为等待队列分配内部资源
- 初始化后等待队列可被用于后续的等待/唤醒操作
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:无前置接口调用要求,可在任何需要等待队列的时刻调用
- 依赖关系:调用者需确保 wait 对象的内存空间已有效分配
出参
| 名称 | 数据类型 | 输出说明 |
|---|---|---|
| wait | osal_wait * | 待初始化的等待队列指针,由调用方分配内存,函数填充内部实现指针 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 初始化成功 | 等待队列资源分配成功 |
| OSAL_FAILURE(-1) | 初始化失败 | 参数无效或内存分配失败 |
参考案例
src/application/ux/framework/event/ux_fwk_sync_event.c#osal_wait_initsrc/middleware/services/gpu/drv/dpu/qspi/dpu_qspi.c#osal_wait_initsrc/middleware/services/srv_tiot_host/tiot_driver/common/transfer/tiot_xfer.c#osal_wait_init
osal_wait_interruptible
头文件清单
功能说明
- 将当前线程置于可中断睡眠状态(TASK_INTERRUPTIBLE),等待条件函数返回真或收到信号
- 每次等待队列被唤醒时重新检查条件函数的返回值
- LiteOS 不支持可中断等待,该接口与 osal_wait_uninterruptible 行为一致
- 支持系统:linux liteos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:修改等待条件后,需调用 osal_wait_wakeup() 或 osal_wait_wakeup_interruptible() 唤醒等待队列
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
| func | osal_wait_condition_func | 条件判断函数指针 | 非 NULL;返回值为 bool 类型,非零表示条件为真 |
| param | const void * | 传递给条件函数的参数 | 由条件函数定义决定 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 条件为真,等待结束 | 条件函数返回非零值 |
| OSAL_FAILURE(-1) | 等待失败 | 参数无效(wait 为 NULL 或 wait->wait 为 NULL) |
| -ERESTARTSYS | 被信号中断 | Linux 下收到信号(LiteOS 下不会返回此值) |
参考案例
osal_wait_uninterruptible
头文件清单
功能说明
- 将当前线程置于不可中断睡眠状态(TASK_UNINTERRUPTIBLE),等待条件函数返回真
- 每次等待队列被唤醒时重新检查条件函数的返回值
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:修改等待条件后,需调用 osal_wait_wakeup() 唤醒等待队列
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
| func | osal_wait_condition_func | 条件判断函数指针 | 非 NULL;返回值为 bool 类型,非零表示条件为真 |
| param | const void * | 传递给条件函数的参数 | 由条件函数定义决定 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 条件为真,等待结束 | 条件函数返回非零值 |
| OSAL_FAILURE(-1) | 等待失败 | 参数无效(wait 为 NULL 或 wait->wait 为 NULL) |
参考案例
src/ohos/third_party/lwip/lwip_adapter/liteos/src/arch/sys_arch.c#osal_wait_interruptible(LiteOS 下 interruptible 内部调用 uninterruptible)
osal_wait_timeout_interruptible
int osal_wait_timeout_interruptible(osal_wait *wait, osal_wait_condition_func func, const void *param, unsigned long ms)
头文件清单
功能说明
- 将当前线程置于可中断睡眠状态,等待条件函数返回真或超时
- 每次等待队列被唤醒时重新检查条件函数的返回值
- 超时时间到达后,无论条件是否为真均返回
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:修改等待条件后,需调用 osal_wait_wakeup() 唤醒等待队列
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
| func | osal_wait_condition_func | 条件判断函数指针 | 非 NULL;返回值为 bool 类型,非零表示条件为真 |
| param | const void * | 传递给条件函数的参数 | 由条件函数定义决定 |
| ms | unsigned long | 超时时间,单位为毫秒 | 不超过 int 取值范围;OSAL_WAIT_FOREVER(0xFFFFFFFF) 表示永久等待 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 条件为真 | 条件在超时前为真 |
| OSAL_FAILURE(-1) | 等待失败 | 参数无效(wait 为 NULL 或 wait->wait 为 NULL) |
| 1 | 条件为真 | 条件在超时前为真(LiteOS 实现) |
| 0 | 超时且条件为假 | 超时后条件仍为假 |
| >1(剩余ticks) | 条件为真 | 条件在超时前为真,返回剩余等待时间 |
参考案例
src/application/ux/framework/event/ux_fwk_sync_event.c#osal_wait_timeout_interruptiblesrc/middleware/services/gpu/drv/dpu/qspi/dpu_qspi.c#osal_wait_timeout_interruptiblesrc/middleware/services/srv_tiot_host/tiot_driver/common/transfer/tiot_xfer_utils.c#osal_wait_timeout_interruptible
osal_wait_timeout_uninterruptible
int osal_wait_timeout_uninterruptible(osal_wait *wait, osal_wait_condition_func func, const void *param, unsigned long ms)
头文件清单
功能说明
- 将当前线程置于不可中断睡眠状态,等待条件函数返回真或超时
- 每次等待队列被唤醒时重新检查条件函数的返回值
- LiteOS 实现与 osal_wait_timeout_interruptible 行为一致
- 支持系统:linux liteos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:修改等待条件后,需调用 osal_wait_wakeup() 唤醒等待队列
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
| func | osal_wait_condition_func | 条件判断函数指针 | 非 NULL;返回值为 bool 类型,非零表示条件为真 |
| param | const void * | 传递给条件函数的参数 | 由条件函数定义决定 |
| ms | unsigned long | 超时时间,单位为毫秒 | 不超过 int 取值范围;OSAL_WAIT_FOREVER(0xFFFFFFFF) 表示永久等待 |
返回值
- 返回类型:int
| 返回值 | 文字含义 | 触发场景 |
|---|---|---|
| OSAL_SUCCESS(0) | 条件为真 | 条件在超时前为真 |
| OSAL_FAILURE(-1) | 等待失败 | 参数无效(wait 为 NULL 或 wait->wait 为 NULL) |
| 1 | 条件为真 | 条件在超时前为真(LiteOS 实现) |
| 0 | 超时且条件为假 | 超时后条件仍为假 |
| >1(剩余ticks) | 条件为真 | 条件在超时前为真,返回剩余等待时间 |
参考案例
osal_wait_wakeup
头文件清单
功能说明
- 唤醒等待队列上的所有线程,与 wait_event 配对使用
- 唤醒后等待线程将重新检查条件函数
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:当前接口依赖等待队列上已有线程处于等待状态
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 待唤醒的等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
参考案例
src/application/ux/framework/event/ux_fwk_sync_event.c#osal_wait_wakeupsrc/middleware/services/gpu/drv/vau/list/vau_list.c#osal_wait_wakeupsrc/middleware/services/srv_tiot_host/tiot_driver/common/transfer/tiot_xfer.c#osal_wait_wakeup
osal_wait_wakeup_interruptible
头文件清单
功能说明
- 唤醒等待队列上的可中断线程,与 wait_event_interruptible 配对使用
- LiteOS 实现与 osal_wait_wakeup 行为一致
- 支持系统:linux liteos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:当前接口依赖等待队列上已有线程处于可中断等待状态
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 待唤醒的等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
参考案例
src/ohos/third_party/lwip/lwip_adapter/liteos/src/arch/sys_arch.c#osal_wait_wakeup(LiteOS 下 wakeup_interruptible 内部调用 wakeup)
osal_wait_destroy
头文件清单
功能说明
- 销毁等待队列,释放内部资源
- 该接口可能释放内存,wait 应由 osal_wait_init 初始化
- 支持系统:linux liteos freertos
前置条件
- 调用时序约束:wait 已通过 osal_wait_init() 初始化成功(wait->wait 不为 NULL)
- 依赖关系:销毁前确保无线程正在该等待队列上等待
入参
| 名称 | 参数类型 | 详细说明 | 约束取值范围 |
|---|---|---|---|
| wait | osal_wait * | 待销毁的等待队列指针 | 非 NULL,且已通过 osal_wait_init 初始化 |
参考案例
src/application/ux/framework/event/ux_fwk_sync_event.c#osal_wait_destroysrc/middleware/services/gpu/drv/vau/list/vau_list.c#osal_wait_destroysrc/middleware/services/srv_tiot_host/tiot_driver/common/transfer/tiot_xfer.c#osal_wait_destroy
Type definitions
osal_wait_condition_func
使用说明
- 用于 osal_wait_interruptible、osal_wait_uninterruptible、osal_wait_timeout_interruptible、osal_wait_timeout_uninterruptible 接口的条件判断回调函数参数类型
- 调用时机:等待队列被唤醒时调用,返回值决定是否结束等待(非零表示条件为真,结束等待;零表示条件为假,继续等待)
- 参数 param:由等待接口的 param 参数透传传入
- 返回值处理:返回值作为条件判断结果,非零表示条件为真
Structures
osal_wait
成员说明
| 成员名称 | 数据类型 | 描述 |
|---|---|---|
| wait | void * | 等待队列内部实现指针,由 osal_wait_init 初始化赋值 |