380091044 发表于 2024-2-10 16:57:55

跑系统中,挂起任务中出现OS_PRIO_SELF怎么理解?



跑系统中,挂起任务中出现OS_PRIO_SELF怎么理解?是挂起挂起函数本身吗?还是挂起当前正在执行任务自身的?模糊不清,找不到边界感。


OSTaskSuspend(OS_PRIO_SELF);

gentleman 发表于 2024-2-10 18:00:38

挂起自己

380091044 发表于 2024-2-10 20:09:57

gentleman 发表于 2024-2-10 18:00
挂起自己

如何回复自己呢?

CosyOS 发表于 2024-2-10 20:32:37

本帖最后由 CosyOS 于 2024-2-10 20:45 编辑

380091044 发表于 2024-2-10 20:09
如何回复自己呢?
没有恢复自己。
因为挂起自己后,自身任务已不具备运行条件,所以会立即触发任务调度并切换到其它任务,此后该任务不能再运行(除非被别人恢复),又如何恢复自己?
所以,只有“挂起自己”、“挂起别人”、“恢复别人”,而且“挂起别人”一定要慎用,否则可能会导致不良后果。
“恢复/挂起” 常用的方式为 “挂起自己而后被别人恢复”,是实现线程同步的一种手段。

380091044 发表于 2024-2-10 20:56:08

CosyOS 发表于 2024-2-10 20:32
没有恢复自己。
因为挂起自己后,自身任务已不具备运行条件,所以会立即触发任务调度并切换到其它任务,此 ...

太经典了,大家都来学习,感谢老师精彩的解答,我明白了,有了边界感!

380091044 发表于 2024-2-10 21:00:03

CosyOS 发表于 2024-2-10 20:32
没有恢复自己。
因为挂起自己后,自身任务已不具备运行条件,所以会立即触发任务调度并切换到其它任务,此 ...

我 的理解,再确认一下,防止理解差了,挂起的是这个任务自己,不是恢复函数"OSTaskSuspend()自己"

CosyOS 发表于 2024-2-10 21:21:36

本帖最后由 CosyOS 于 2024-2-10 21:36 编辑

“恢复自身任务” 在实际中是不会有这种需求的。
原因是:
1、如果自身任务正在运行,又何必恢复自身?
2、如果自身任务被挂起(无论是被别人挂起还是被自己挂起),该任务都不能再运行,又如何恢复自身?

如果还有不理解的地方,请尽量描述清楚,我会耐心解答。。。

380091044 发表于 2024-2-11 07:38:27

CosyOS 发表于 2024-2-10 21:21
“恢复自身任务” 在实际中是不会有这种需求的。
原因是:
1、如果自身任务正在运行,又何必恢复自身?


感谢老师耐心回答,明白了。
页: [1]
查看完整版本: 跑系统中,挂起任务中出现OS_PRIO_SELF怎么理解?