[RTT例程练习] 1.7 优先级翻转之优先级继承

本文探讨了RTT(RT-Thread)操作系统中如何使用优先级继承算法解决优先级反转问题。通过一个实例说明,当低优先级线程持有互斥量,高优先级线程被阻塞时,系统会提升低优先级线程的优先级,以防止高优先级线程被阻塞,确保系统效率。
摘要由CSDN通过智能技术生成

RTT 的mutex 实现了优先级继承算法,可用其来解决优先级反转的问题。

还是来自官网:

thread2和worker线程虽然优先级比thread1要高,但是这两个线程均在进程开始出就执行了延时函数,于是轮到 thread1 执行,然后 thread1获得互斥量,thread2延时结束后,虽然它的优先级高于thread1,但是它所需的互斥量被thread1占有了,它无法获得所需的互斥量以便继续运行。在此时,系统的优先级继承算法也会起作用,将thread1的优先级提升到与thread2一致,验证方法是在thread1 release互斥量之前插入tid2->currentpriority 是否等于 tid1->currentpriority的判断语句,当然此时的结果是相等的。当 thread1 优先级被提升到和 thread2 一样后,worker 线程优先级因为低于 thread1 的优先级而不再能够抢占 thread1, 从而保证避免优先级反转现象发生。
所以说,优先级反转的问题可以通过优先级继承来解决,在RT-Thread 的 mutex 中实现了优先级继承算法。


程序:

#include <rtthread.h>

static rt_mutex_t mutex = RT_NULL;
static rt_uint8_t t1_count, t2_count, worker_count;
static rt_thread_t t1, t2, worker;

static void thread1_entry(void *parameter)
{
    rt_err_t result;
    
    result = rt_mutex_take(mutex, RT_WAITING_FOREVER
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值