Synchronization Core

信号量机制(Semaphore)

信号量用于任务同步与资源管理,通过计数机制控制并发访问, 实现阻塞、唤醒与调度协作。

机制定义

Semaphore = 资源计数 + 阻塞队列 + 唤醒机制 + 调度联动

在 HRTOS 中,信号量是最基础的同步工具,用于解决任务间资源竞争问题。

核心行为

申请资源

计数>0则获取成功,否则阻塞。

任务阻塞

无资源时进入等待队列。

释放资源

计数增加并唤醒等待任务。

任务恢复

被唤醒任务重新进入调度。

执行流程

1. 初始化信号量

设置初始资源数量。

2. 任务申请

尝试获取资源。

3. 阻塞等待

资源不足进入等待队列。

4. 释放资源

资源释放触发唤醒。

系统关系模型

Task → Semaphore → Scheduler → Task

演示代码


#include "hrtos.h"

#define SEM_ID 0

sbit LED_PRODUCER = P1^0;
sbit LED_CONSUMER = P1^1;
sbit LED_SEM      = P1^2;   // semaphore state indicator

/* 生产者任务 */
void task_A(void)
{
    while(1)
    {
        os_delay(2);

        os_sem_post(SEM_ID);

        LED_PRODUCER = ~LED_PRODUCER;  // 生产节奏闪烁

        LED_SEM = 1;   // 表示资源“被释放/可用”
    }
}

/* 消费者任务 */
void task_B(void)
{
    while(1)
    {
        /* 等待资源 */
        if(os_sem_wait(SEM_ID))
        {
            /* 获取资源成功 */
            LED_CONSUMER = ~LED_CONSUMER;  // 消费节奏

            LED_SEM = 0;   // 表示资源被消耗

            /* 模拟处理 */
            os_delay(1);
        }

        os_delay(1);
    }
}

/* 系统入口 */
void hrtos_main(void)
{
    LED_PRODUCER = 0;
    LED_CONSUMER = 0;
    LED_SEM = 0;

    os_sem_init(SEM_ID, 0);

    os_task_create((unsigned int)task_A, 1, 3, 5);
    os_task_create((unsigned int)task_B, 2, 2, 5);
}

系统意义

信号量是 RTOS 并发控制的基础机制之一, 用于保证任务间同步执行与资源安全访问, 对系统稳定性与实时性具有关键作用。

相关导航

Task Execution

任务执行模型

Scheduling Engine

调度系统

Interrupt Flow

中断机制

Task Lifecycle

任务生命周期