核心接口
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
典型用途
• 外设寄存器保护
• 全局数据结构保护
• 驱动层临界区
• 文件系统访问同步