Mutex
互斥锁(Mutex)为临界区提供独占访问保护——同一时刻只有一个任务能持有锁。支持阻塞锁(lock,无限等待)、超时锁(lock_timeout)和非阻塞尝试锁(trylock,获取失败立即返回)。
持有 Mutex 的任务不能再次获取同一把锁(非递归)。适用保护全局变量、硬件寄存器、复杂数据结构等任务间共享资源。
头文件清单
接口清单
接口名称 功能简述 osal_mutex_init 初始化互斥锁 osal_mutex_lock 获取互斥锁(永久等待) osal_mutex_lock_timeout 获取互斥锁(限时等待) osal_mutex_lock_interruptible 获取互斥锁(可被信号中断) osal_mutex_trylock 尝试获取互斥锁(非阻塞) osal_mutex_unlock 释放互斥锁 osal_mutex_is_locked 查询互斥锁是否处于锁定状态 osal_mutex_destroy 销毁互斥锁
Functions
osal_mutex_init
头文件清单
功能说明
- 初始化互斥锁,为互斥锁分配底层资源并完成初始状态设置
- 互斥锁初始化后方可被锁定、解锁或销毁
- 禁止对已初始化的互斥锁重复调用初始化,禁止使用 memset 将互斥锁清零
前置条件
- 互斥锁未被初始化或已被销毁,mutex 指针指向的内存空间已分配
- 互斥锁结构体中 mutex 字段为 NULL 或已通过 osal_mutex_destroy 释放
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待初始化的互斥锁结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 初始化成功 互斥锁创建成功 OSAL_FAILURE(-1) 初始化失败 mutex 为 NULL、mutex 已初始化或底层创建互斥锁失败
参考案例
vendor/HiHope_NearLink_DK_WS63E_V03/demo/mutex/mutex_example.c#osal_mutex_init
osal_mutex_lock
头文件清单
功能说明
- 获取互斥锁,独占式锁定,若互斥锁不可用则当前任务休眠等待直到获取成功
- 互斥锁必须由获取它的同一任务释放,禁止递归锁定
- 任务持有互斥锁期间不可退出,互斥锁所在内核内存不可在锁定状态下释放
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
- 当前任务未持有该互斥锁,禁止递归锁定
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待获取的互斥锁结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 获取成功 互斥锁成功锁定 OSAL_FAILURE(-1) 获取失败 mutex 为 NULL 或底层获取互斥锁失败
参考案例
vendor/HiHope_NearLink_DK_WS63E_V03/demo/mutex/mutex_example.c#osal_mutex_lock
osal_mutex_lock_timeout
头文件清单
功能说明
- 在指定超时时间内获取互斥锁,若互斥锁不可用则当前任务休眠等待,超时后返回失败
- 当 timeout 设置为 OSAL_MUTEX_WAIT_FOREVER 时,行为与 osal_mutex_lock 一致,永久等待
- LiteOS 和 FreeRTOS 支持嵌套锁特性
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待获取的互斥锁结构体指针 非NULL timeout unsigned int 等待超时时间,单位为毫秒 OSAL_MUTEX_WAIT_FOREVER(-1)表示永久等待;大于0表示限时等待毫秒数
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 获取成功 在超时时间内成功获取互斥锁 OSAL_FAILURE(-1) 获取失败 mutex 为 NULL、超时未获取或底层获取互斥锁失败
参考案例
vendor/HiHope_NearLink_DK_WS63E_V03/demo/mutex/mutex_example.c#osal_mutex_lock_timeout
osal_mutex_lock_interruptible
头文件清单
功能说明
- 获取互斥锁,可被信号中断,若等待过程中收到信号则返回而不获取互斥锁
- 与 osal_mutex_lock 类似,区别在于等待过程可被信号打断
- LiteOS 支持嵌套锁特性
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待获取的互斥锁结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 OSAL_SUCCESS(0) 获取成功 互斥锁成功锁定 OSAL_EINTR(-4) 被信号中断 等待过程中收到信号 OSAL_FAILURE(-1) 获取失败 mutex 为 NULL 或底层获取互斥锁失败
osal_mutex_trylock
头文件清单
功能说明
- 尝试获取互斥锁,非阻塞方式,若互斥锁不可用则立即返回而不等待
- LiteOS 和 FreeRTOS 支持嵌套锁特性
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待尝试获取的互斥锁结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 TRUE(1) 获取成功 互斥锁成功锁定 FALSE(0) 获取失败 mutex 为 NULL 或互斥锁不可用
osal_mutex_unlock
头文件清单
功能说明
- 释放互斥锁,解锁由当前任务先前锁定的互斥锁
- 禁止在中断上下文中调用
- 禁止解锁未被锁定的互斥锁
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
- 当前任务已持有该互斥锁
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待释放的互斥锁结构体指针 非NULL
参考案例
vendor/HiHope_NearLink_DK_WS63E_V03/demo/mutex/mutex_example.c#osal_mutex_unlock
osal_mutex_is_locked
头文件清单
功能说明
- 查询互斥锁是否处于锁定状态
- 返回 true 表示互斥锁已锁定,返回 false 表示未锁定
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待查询的互斥锁结构体指针 非NULL
返回值
- 返回类型:int
返回值 文字含义 触发场景 true(非0) 互斥锁已锁定 互斥锁处于锁定状态 false(0) 互斥锁未锁定 互斥锁处于未锁定状态
osal_mutex_destroy
头文件清单
功能说明
- 销毁互斥锁,释放互斥锁占用的底层资源
- 必须在模块退出时调用,否则将导致内存泄漏
- 调用后应将 mutex 指针置为 NULL
前置条件
- 互斥锁已通过 osal_mutex_init 初始化成功
- 互斥锁未被任何任务持有(处于未锁定状态)
入参
名称 参数类型 详细说明 约束取值范围 mutex osal_mutex * 指向待销毁的互斥锁结构体指针 非NULL
参考案例
vendor/HiHope_NearLink_DK_WS63E_V03/demo/mutex/mutex_example.c#osal_mutex_destroy
Structures
osal_mutex
成员说明:
成员名称 数据类型 描述 mutex void * 底层互斥锁句柄指针,初始化后指向底层系统互斥锁资源,销毁后置为NULL