什么是优先级翻转?
前置条件
1.至少3个任务(分别高中低3优先级)
2.使用信号量资源
为什么会导致优先级翻转
当一个低优先级任务和一个高优先级任务同时使用同一个信号量,而系统中还有其他中等优先级任务时。如果低优先级任务获得了信号量,那么高优先级的任务就会处于等待状态,但是,中等优先级的任务可以打断低优先级任务而先于高优先级任务运行(此时高优先级的任务在等待信号量,所以不能运行)这是就出现了优先级翻转的现象。
优先级翻转了会怎样
优先级翻转会造成高优先级线程的实时性得不到保证,失去高优先级的意义
如何尽量避免优先级翻转
使用互斥信号量
互斥信号量
互斥信号量其实就是一个拥有优先级继承的二值信号量,在同步的应用中(任务与任务或中 断与任务之间的同步)二值信号量最适合。
互斥信号量适合用于那些需要互斥访问的应用中。 在互斥访问中互斥信号量相当于一个钥匙,当任务想要使用资源的时候就必须先获得这个钥匙,
当使用完资源以后就必须归还这个钥匙,这样其他的任务就可以拿着这个钥匙去使用资源。
为什么互斥信号量能解决优先级翻转
互斥信号量具有优先级继承的特性。什么是优先级继承呢?
当一个互斥信号量正在被一个低优先级的任务使用,而此时有个高优先级的任务也尝试获取这个互斥信号量的话就会被阻塞。不过互斥信号量的原因这个高优先级的任务会将低优先级任务的优先级提升到与自己相同的优先级, 这个过程就是优先级继承。优先级继承尽可能的降低了高优先级任务处于阻塞态的时间,并且将已经出现的 “优先级翻转”的影响降到最低。
注意
互斥信号量不能用于中断服务函数中。
转载原文链接:https://blog.csdn.net/m0_58832575/article/details/126903356?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-4-126903356-blog-130396441.235v38pc_relevant_sort_base3&spm=1001.2101.3001.4242.3&utm_relevant_index=7