互斥锁(Mutex)

基于 OS_RES 资源单元实现的互斥同步机制,用于任务间临界资源保护, 支持优先级继承以避免优先级反转问题。

资源互斥 优先级继承 临界区保护

定义

Mutex 是基于 OS_RES 的 value + owner + wait_mask 实现的资源锁机制, 具有“所有权语义”,用于保证同一时刻只有一个任务访问共享资源。

核心接口

char os_mutex_init(char mid) char os_mutex_lock(char mid) char os_mutex_unlock(char mid)

数据结构模型

OS_RES[mid] { value // 1=可用 0=占用语义 owner // 当前持有任务ID wait_mask // 等待任务位图 wait_cnt // 等待计数 }

初始化流程(os_mutex_init)

m->value = 1 m->owner = OS_INVALID_ID m->wait_mask = 0 m->wait_cnt = 0

初始化表示 Mutex 处于“空闲可用状态”。

加锁流程(os_mutex_lock)

EA = 0 if (owner == INVALID) { owner = current_task return 1 } if (owner == current_task) { return -1 // 不支持递归 } /* 优先级继承 */ if (current_prio > owner_prio) { owner_prio = current_prio } EA = 1 os_wait(WAIT_MUTEX, mid, 0)

核心逻辑:竞争失败 → 优先级继承 → 进入等待队列。

解锁流程(os_mutex_unlock)

if (owner != current_task) return -1 restore priority if (wait_mask != 0) { next = highest_prio_task(wait_mask) owner = next wake_task(next) return 1 } owner = INVALID return 0

优先级继承机制

当高优先级任务等待低优先级任务持有的 Mutex 时, 系统会临时提升持有者优先级,避免优先级反转。

继承发生在 lock 阻塞阶段,unlock 时恢复原始优先级。

关键特性

• 资源独占访问
• 所有权机制(必须 unlock)
• 不支持递归锁
• 支持优先级继承
• wait_mask 管理等待任务
• EA 临界区保护

行为语义

lock -> 获取 or 阻塞 unlock -> 释放 + 唤醒 wait -> 进入 WAIT_MUTEX

典型用途

• 外设寄存器保护
• 全局数据结构保护
• 驱动层临界区
• 文件系统访问同步