# 互斥锁 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 功能概述 互斥锁(Mutex)是多线程编程中的一种同步机制,用于避免多个线程同时访问同一共享资源(如全局变量)而导致的数据竞争问题。 它通过对访问共享资源的临界区进行互斥保护,保证同一时刻只有一个线程能够进入临界区,从而实现对关键代码的保护,使多线程能够以受控、有序的方式访问共享资源。 # 互斥锁API ## 头文件 *qosa_sys.h* ## 函数概览 | **函数** | **说明** | | --- | --- | | *qosa_mutex_create()* | 创建递归互斥锁 | | *qosa_mutex_lock()* | 获取互斥锁(支持超时设置) | | *qosa_mutex_try_lock()* | 以非阻塞的方式尝试获取互斥锁 | | *qosa_mutex_unlock()* | 释放互斥锁 | | *qosa_mutex_delete()* | 删除互斥锁 | ## 函数详解 ### qosa_mutex_create - **功能描述** 创建递归互斥锁。 - **函数原型** ```c int qosa_mutex_create(qosa_mutex_t *mutexRef) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *mutexRef* | 输出 | qosa_mutex_t * | 指向互斥锁句柄的指针 | - **返回值说明** *QOSA_ERROR_OK*:函数执行成功 *QOSA_ERROR_MUTEX_INVALID_ERR*:互斥锁参数无效 *QOSA_ERROR_MUTEX_CREATE_ERR*:互斥锁创建失败 ### qosa_mutex_lock - **功能描述** 获取互斥锁(支持超时设置)。 - **函数原型** ```c int qosa_mutex_lock(qosa_mutex_t mutexRef, qosa_uint32_t timeout) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *mutexRef* | 输入 | qosa_mutex_t | 互斥锁句柄 | | *timeout* | 输入 | qosa_uint32_t | 超时时间。单位:毫秒
*QOSA_WAIT_FOREVER*:无限等待
*QOSA_NO_WAIT*:不等待 | - **返回值说明** *QOSA_ERROR_OK*:函数执行成功 *QOSA_ERROR_MUTEX_INVALID_ERR*:互斥锁参数无效 *QOSA_ERROR_MUTEX_EBUSY_ERR*:互斥锁已被占用 *QOSA_ERROR_MUTEX_LOCK_ERR*:互斥锁获取失败 ### qosa_mutex_try_lock - **功能描述** 以非阻塞的方式尝试获取互斥锁。函数执行完成后立即返回结果。 - **函数原型** ```c int qosa_mutex_try_lock(qosa_mutex_t mutexRef) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *mutexRef* | 输入 | qosa_mutex_t | 互斥锁句柄 | - **返回值说明** *QOSA_ERROR_OK*:函数执行成功 *QOSA_ERROR_MUTEX_INVALID_ERR*:互斥锁参数无效 *QOSA_ERROR_MUTEX_EBUSY_ERR*:互斥锁已被占用 *QOSA_ERROR_MUTEX_LOCK_ERR*:互斥锁获取失败 ### qosa_mutex_unlock - **功能描述** 释放互斥锁。 - **函数原型** ```c int qosa_mutex_unlock(qosa_mutex_t mutexRef) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *mutexRef* | 输入 | qosa_mutex_t | 互斥锁句柄 | - **返回值说明** *QOSA_ERROR_OK*:函数执行成功 *QOSA_ERROR_MUTEX_INVALID_ERR*:互斥锁参数无效 *QOSA_ERROR_MUTEX_UNLOCK_ERR*:互斥锁解锁失败 ### qosa_mutex_delete - **功能描述** 删除互斥锁,并释放资源。 - **函数原型** ```c int qosa_mutex_delete(qosa_mutex_t mutexRef) ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *mutexRef* | 输入 | qosa_mutex_t | 互斥锁句柄 | - **返回值说明** *QOSA_ERROR_OK*:函数执行成功 *QOSA_ERROR_MUTEX_INVALID_ERR*:互斥锁参数无效 *QOSA_ERROR_MUTEX_DELETE_ERR*:互斥锁删除失败 ## 枚举定义 ### qosa_errcode_os_e 错误码枚举定义如下: ```c typedef enum { QOSA_ERROR_OK = 0, ... QOSA_ERROR_MUTEX_CREATE_ERR = 100 | QOSA_ERRCODE_OS_BASE, QOSA_ERROR_MUTEX_LOCK_ERR, QOSA_ERROR_MUTEX_EBUSY_ERR, QOSA_ERROR_MUTEX_INVALID_ERR, QOSA_ERROR_MUTEX_UNLOCK_ERR, QOSA_ERROR_MUTEX_DELETE_ERR, ... }qosa_errcode_os_e; ``` | **成员** | **说明** | | --- | --- | | *QOSA_ERROR_OK* | 函数执行成功 | | *QOSA_ERROR_MUTEX_CREATE_ERR* | 互斥锁创建失败 | | *QOSA_ERROR_MUTEX_LOCK_ERR* | 互斥锁获取失败 | | *QOSA_ERROR_MUTEX_EBUSY_ERR* | 互斥锁已被占用 | | *QOSA_ERROR_MUTEX_INVALID_ERR* | 互斥锁参数无效 | | *QOSA_ERROR_MUTEX_UNLOCK_ERR* | 互斥锁解锁失败 | | *QOSA_ERROR_MUTEX_DELETE_ERR* | 互斥锁删除失败 | # 应用逻辑流程图 ```{figure} images/board_DiVXwgVRehRWXbbCKPuccFqiniJ.jpg :align: center :alt: image ``` # 示例代码 完整示例代码请查看 https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/system/sync_comm/mutex/mutex_demo.c 。