互斥锁(Mutex)
互斥锁用于保护共享资源,确保同一时刻只有一个任务能够访问临界区, 从而避免多任务竞争导致的数据异常。
机制定义
Mutex = 获取锁 + 独占访问 + 释放锁 + 任务同步
Mutex 是 HRTOS 同步模型(Synchronization Mechanism)中的核心组件,用于实现对共享资源的互斥访问控制。
所属同步模型
Communication Model
Synchronization Model
Mutex 属于任务同步机制,用于解决资源竞争问题。
触发条件
互斥锁通常用于以下场景:
共享变量访问
多个任务同时读写同一资源。
外设独占控制
串口、SPI、I2C 等资源保护。
临界区保护
避免并发修改关键数据。
任务同步控制
协调多个任务访问顺序。
执行流程
1. 初始化互斥锁
创建锁资源。
2. 任务申请锁
进入共享资源访问阶段。
3. 独占执行临界区
执行受保护代码。
4. 释放互斥锁
允许其他任务访问。
5. 系统恢复调度
继续任务切换与运行。
演示代码
#include <HRTOS.H>
#include <HRTOS_KERNEL.H>
void task1(void)
{
os_lock_init();
while(1)
{
os_mutex_init();
os_mutex_lock();
os_mutex_unlock();
os_wait1(5);
}
}
void task2(void)
{
while(1)
{
os_wait1(5);
}
}
void main(void)
{
os_task((unsigned int)task1, 0, 3, 0);
os_task((unsigned int)task2, 1, 2, 0);
os_task_release(0);
while(1)
{
os_nop();
}
}
API 参考
Mutex vs Semaphore
Mutex
用于互斥访问资源,具有所有权概念。
Semaphore
用于计数资源或同步,不具备严格所有权。
系统意义
互斥锁是RTOS中最基础的同步机制之一, 用于保证共享资源访问安全并降低竞争条件风险。