Threadx 优先级翻转-优先级继承

优先级翻转

优先级翻转是指较低优先级已经获得临界资源,这时较高优先级线程也需要获得的这个临界资源时,较高优先级线程会被挂起,等待资源释放。如果这时中等优先级任务抢占了低优先级任务,就出现了低优先级任务先执行,高优先级任务在等待,而且时间也变得不确定。
实时系统最大特点就是高优先级任务能够在确定时间进行响应,并且能够抢占低优先级任务。优先级翻转现象打破了这种规则,使系统变得不稳定。
举例:
1,线程a执行,并获取了互斥量M
2,线程b抢占了线程a
3,发生中断,唤醒了线程c,把线程c加到了就绪队列,并且线程c是所有就绪线程中优先级最高线程。线程c执行并企图获取互斥量M,由于未能获取,自我挂起。切换到线程b继续执行。
4,直到线程b执行完,切换到线程a,线程a释放互斥量M,高优先级线程c才能继续执行。
高优先级线程c的执行响应时间发生了不确定性。
在这里插入图片描述
解决线程优先级翻转方法:
1,应用开发者通过合理设置线程优先级和资源来防止优先级翻转
2,低优先级线程获取共享资源时,可以设置抢占门限避免中等优先级的线程抢占执行
3,线程可以用互斥量的优先级继承选项来排除不确定的优先级翻转。

优先级继承

优先级继承是指 高优先级的线程申请被低优先级线程占有的互斥量时,低优先级会得到高优先级,当低优先级线程释放互斥量后,会恢复到原来的优先级。 也就是让低优先级任务短暂变为高优先级,阻止了中等优先级的抢占。
Threadx系统中只有互斥量有优先级继承选项,信号量没有。

参考:嵌入式实时操作系统的多线程计算

发布了41 篇原创文章 · 获赞 2 · 访问量 3254

猜你喜欢

转载自blog.csdn.net/qq_45683435/article/details/104187804
今日推荐