对于韦东山的信号量反转和互斥理解
我的看法是,信号量优先级反转,我们设三个任务
-
任务1:优先级最低,vTaskDelay
-
任务2: 优先级中等,mDelay
-
任务3:优先级最高,mDelay
g_xSemTicks = xSemaphoreCreateCounting(1, 1);
任务2-3都是,后任务1两秒后运行,结果是:任务一走两秒,任务2走完卡主了。因为其不释放信号量,反转;释放了,也反转,并且跑完3之后,因为2没有自杀,2一直卡住了1.
如果我们引入了互斥锁(Mutex):
g_xSemTicks = xSemaphoreCreateMutex();
会发现:
- 不用设置初始优先级,默认+1。就是默认一条赛道。
- 现象是,1停住两秒,又因为1是vTaskDela,会有堵塞,1和2两者交叉运行
- 1跑完后,2挺住,3优先级高,跑完全程,1继续。
世间两个我,一个逐星河,一个归烟火。 2024.5.31
妻:“老板,拿一瓶红酒来,给我老公的。”老板:“一瓶不够吧?你老公酒量大得出奇。”妻:“拿来喝可能不够,不过用来砸一瓶应该够了。”