信号量反转和互斥理解个人理解

对于韦东山的信号量反转和互斥理解

我的看法是,信号量优先级反转,我们设三个任务

  • 任务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

妻:“老板,拿一瓶红酒来,给我老公的。”老板:“一瓶不够吧?你老公酒量大得出奇。”妻:“拿来喝可能不够,不过用来砸一瓶应该够了。”

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值