跳转至

workqueue

workqueue 提供工作队列机制,支持将工作任务提交到内核全局工作队列异步执行,适用于中断上下文延迟处理和并发任务调度场景。

头文件清单

#include "include/osal/schedule/osal_workqueue.h"

接口清单

接口名称 功能简述
osal_workqueue_init 初始化工作队列,绑定回调处理函数
osal_workqueue_schedule 将工作任务提交到全局工作队列
osal_workqueue_destroy 销毁工作队列,释放关联资源
osal_workqueue_flush 等待工作队列最后一次执行完成

Functions

osal_workqueue_init

int osal_workqueue_init(osal_workqueue *work, osal_workqueue_handler handler)

头文件清单

#include "include/osal/schedule/osal_workqueue.h"

功能说明

  • 初始化工作队列结构体,绑定回调处理函数
  • 注册工作节点到全局工作队列,使后续可调度执行
  • 支持 linux、liteos、freertos 系统

前置条件

  • 调用时序约束:当前工作队列未被重复初始化(work->work 须为 NULL)
  • 依赖关系:全局工作队列已就绪

入参

名称 参数类型 详细说明 约束取值范围
work osal_workqueue * 待初始化的工作队列结构体指针 非NULL,且 work->work 为 NULL
handler osal_workqueue_handler 工作队列回调处理函数指针 非NULL,函数签名需匹配 void ()(osal_workqueue workqueue)

出参

名称 数据类型 输出说明
work osal_workqueue * work->work 成员被设置为底层工作结构体指针,由调用方分配内存、函数填充

返回值

  • 返回类型:int
返回值 文字含义 触发场景
OSAL_SUCCESS(0) 初始化成功 参数合法且内存分配成功
OSAL_FAILURE(-1) 初始化失败 work 为 NULL 或 work->work 非 NULL 或内存分配失败

参考案例

  • middleware/services/gpu/drv/vau/isr/vau_isr.c

osal_workqueue_schedule

int osal_workqueue_schedule(osal_workqueue *work)

头文件清单

#include "include/osal/schedule/osal_workqueue.h"

功能说明

  • 将工作任务提交到内核全局工作队列执行
  • 若工作未被排队则加入队列,若已在队列中则保持原位置不重复入队
  • 回调函数将在全局工作队列的工作线程上下文中异步执行
  • 支持 linux、liteos、freertos 系统

前置条件

  • 调用时序约束:work 已通过 osal_workqueue_init() 成功初始化
  • 依赖关系:全局工作队列已就绪

入参

名称 参数类型 详细说明 约束取值范围
work osal_workqueue * 待调度的工作队列结构体指针 非NULL,且 work->work 非 NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
TRUE(1) 调度成功 工作成功加入全局工作队列
FALSE(0) 调度失败 work 为 NULL 或 work->work 为 NULL 或底层 schedule_work 返回失败

参考案例

  • middleware/services/gpu/drv/vau/isr/vau_isr.c

osal_workqueue_destroy

void osal_workqueue_destroy(osal_workqueue *work)

头文件清单

#include "include/osal/schedule/osal_workqueue.h"

功能说明

  • 销毁工作队列,释放关联资源
  • 销毁后工作队列不可再用于调度
  • 支持 linux、liteos、freertos 系统

前置条件

  • 调用时序约束:work 已通过 osal_workqueue_init() 成功初始化
  • 依赖关系:全局工作队列已就绪

入参

名称 参数类型 详细说明 约束取值范围
work osal_workqueue * 待销毁的工作队列结构体指针 非NULL,且 work->work 非 NULL

参考案例

  • middleware/services/gpu/drv/vau/isr/vau_isr.c

osal_workqueue_flush

int osal_workqueue_flush(osal_workqueue *work)

头文件清单

#include "include/osal/schedule/osal_workqueue.h"

功能说明

  • 等待工作队列最后一次排队实例执行完成
  • 调用后阻塞等待直到当前工作执行完毕,若 flush 开始后未重新入队则返回时保证工作处于空闲状态
  • 支持 linux、liteos 系统

前置条件

  • 调用时序约束:work 已通过 osal_workqueue_init() 成功初始化
  • 依赖关系:全局工作队列已就绪

入参

名称 参数类型 详细说明 约束取值范围
work osal_workqueue * 待刷新的工作队列结构体指针 非NULL,且 work->work 非 NULL

返回值

  • 返回类型:int
返回值 文字含义 触发场景
TRUE(1) 刷新成功 工作已执行完成
FALSE(0) 刷新失败 work 为 NULL 或 work->work 为 NULL 或底层 flush_work 返回失败

Type definitions

osal_workqueue_handler

typedef void (*osal_workqueue_handler)(osal_workqueue *workqueue);

使用说明

作为 osal_workqueue_init() 的 handler 参数类型,指定工作队列回调处理函数签名。回调在工作被调度执行时,由全局工作队列的工作线程上下文调用。

Structures

osal_workqueue

typedef struct osal_workqueue_ {
    int queue_flag;
    void *work;
    void (*handler)(struct osal_workqueue_ *workqueue);
} osal_workqueue;

成员说明

成员名称 数据类型 描述
queue_flag int 工作队列标志位
work void * 底层工作结构体指针,由 osal_workqueue_init() 分配
handler void ()(struct osal_workqueue_ workqueue) 工作队列回调处理函数指针

Macros

OSAL_SUCCESS [SDK公共共享宏]

#define OSAL_SUCCESS 0

OSAL_FAILURE [SDK公共共享宏]

#define OSAL_FAILURE (-1)

FALSE [SDK公共共享宏]

#define FALSE 0

TRUE [SDK公共共享宏]

#define TRUE 1