互斥量是一种特殊的二进制信号量
使用场景1 (互斥访问)
外设的独立访问 如打印 协议操作
使用场景2 解决优先级反转
外设的独立访问 如打印 协议操作
使用场景2 解决优先级反转
我们以较为复杂的场景2来分析
-1- 创建三个任务 优先级从低到高(task1 优先级1)
-2- 我这里给了阻塞函数 所以任务1会先运行 然后是任务2 最后是任务三(如上图里的vtaskdelay)
-3-在任务1运行的过程中任务2抢占任务1导致任务1无法释放信号量
-4-此时任务3开始运行且任务三也要获取信号量
-5-任务3获取不到信号量导致任务3被任务3阻塞 造成了优先级反转!!!
-6-此时只有任务2一直运行
解决优先级反转
-1- 我把信号量替换成了互斥量
-2-在任务1运行的过程中任务2抢占任务1导致任务1无法释放互斥量
-3-此时任务3开始运行且任务三也要获取互斥量
-4-任务3获取不到互斥量于是让任务1继承任务3的优先级则可以让任务1释放互斥量
-5-完美的解决了优先级的翻转问题
-6-此时任务3一直运行
工程获取
查看下方头像