外观
互斥量示例
2025-10-29
概述
本文介绍了如何在 RuiChing Studio 中创建一个 ipc_mutex 示例工程,并将其编译后在开发板上运行。旨在帮助读者进一步熟悉 RuiChing Studio 开发环境,掌握 互斥量的使用。
互斥量的作用
在 RT-Thread 中,互斥量(mutex)是重要的线程同步机制,主要作用为资源互斥访问、 避免优先级反转、线程同步。
运行互斥量使用示例
用本示例以验证 RT-Thread 互斥量的优先级继承机制,避免优先级反转问题为实践目标,实现当高优先级线程等待低优先级线程持有的互斥量时,低优先级线程优先级临时提升至与高优先级线程相同,保证高优先级线程及时获得资源并执行,测试优先级继承机制是否生效的演示效果。
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化设备树

固化 APP

核心示例代码
互斥量示例相关 API
rt_mutex_create:创建一个动态互斥量,名称为 mutex,标志位 RT_IPC_FLAG_PRIO 表示该互斥量支持优先级继承;rt_mutex_take: 获取互斥量,RT_WAITING_FOREVER 表示无限等待;rt_mutex_release:释放互斥量;
applications/mutex_example.c
static void thread3_entry(void *parameter)
{
rt_tick_t tick;
rt_err_t result;
rt_kprintf("the priority of thread3 is: %d\n",
RT_SCHED_PRIV(mu_tid3).current_priority);
result = rt_mutex_take(mutex, RT_WAITING_FOREVER); // 获取互斥量
if (result != RT_EOK)
{
rt_kprintf("thread3 take a mutex, failed.\n");
}
tick = rt_tick_get();
while ((rt_tick_get() - tick) < (RT_TICK_PER_SECOND / 2));
rt_mutex_release(mutex); // 释放互斥量
}
int mutex_pri_inversion_example(void)
{
mutex = rt_mutex_create("mutex", RT_IPC_FLAG_PRIO); // 创建互斥量
if (mutex == RT_NULL)
{
rt_kprintf("create dynamic mutex failed.\n");
return -1;
}
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 输入
mutex_pri_inversion_example命令
预期结果
当高优先级线程(线程 2)等待低优先级线程(线程 3)持有的互斥量时,低优先级线程的优先级会被临时提升到高优先级线程的级别,保证高优先级线程能及时获得资源并执行,从而避免了优先级反转问题。
rtt 终端
mutex_pri_inversion_example
msh />mutex_pri_inversion_example
the priority of thread3 is: 11
the priority of thread2 is: 10
the priority of thread2 is: 10
the priority of thread3 is: 10
test OK.