Synchronization Core

互斥锁(Mutex)

互斥锁用于保护共享资源,确保同一时刻只有一个任务进入临界区, 避免并发访问导致的数据冲突与不一致问题。

机制定义

Mutex = 加锁 → 独占访问 → 解锁 → 任务调度恢复

触发场景

共享变量访问

多任务同时读写共享数据结构

外设访问控制

UART / SPI / I2C 资源竞争

临界区保护

防止中断/切换导致数据破坏

任务同步

控制执行顺序与资源占用

执行流程

1. 初始化 Mutex

创建互斥锁对象

2. 尝试加锁

进入竞争或阻塞

3. 进入临界区

独占访问共享资源

4. 释放锁

归还资源控制权

5. 恢复调度

继续任务切换

演示代码


#include "hrtos.h"

#define MUTEX_ID 0

sbit LED_T1 = P1^0;
sbit LED_T2 = P1^1;
sbit LED_CS = P1^2;

void task1(void)
{
    while(1)
    {
        if(os_mutex_lock(MUTEX_ID))
        {
            LED_T1 = 1;
            LED_CS = 1;

            os_delay(3);

            LED_T1 = 0;
            LED_CS = 0;

            os_mutex_unlock(MUTEX_ID);
        }
        else
        {
            LED_T1 = ~LED_T1;
        }

        os_delay(4);
    }
}

void task2(void)
{
    while(1)
    {
        if(os_mutex_lock(MUTEX_ID))
        {
            LED_T2 = 1;
            LED_CS = 1;

            os_delay(3);

            LED_T2 = 0;
            LED_CS = 0;

            os_mutex_unlock(MUTEX_ID);
        }
        else
        {
            LED_T2 = ~LED_T2;
        }

        os_delay(4);
    }
}

void hrtos_main(void)
{
    os_mutex_init(MUTEX_ID);

    os_task_create((unsigned int)task1, 1, 3, 5);
    os_task_create((unsigned int)task2, 2, 2, 5);
}

API 参考

初始化

os_mutex_init()

加锁

os_mutex_lock()

解锁

os_mutex_unlock()

Mutex vs Semaphore

Mutex

具有所有权的互斥访问机制

Semaphore

资源计数型同步机制

系统意义

Mutex 是 RTOS 核心同步机制,用于保证共享资源一致性, 避免竞态条件,提高系统可靠性。

相关导航