RTOS:请求非睡眠任务唤醒导致下一次睡眠呼叫()不睡觉 - 这样好吗?

时间:2014-09-15 21:41:37

标签: multithreading sleep rtos wakeup

我正在重写现有的实时内核TNKernel;我已经使用了几年,但我不喜欢它的许多设计决定(以及实现细节),所以我决定分叉它并乐于实现我想要的东西。任何感兴趣的人都可以在project page on bitbucket上阅读其他信息。

在我看来,TNKernel有一个奇怪的特性:它有服务tn_task_sleep(int timeout),它将当前任务置于休眠状态,并且tn_task_wakeup(struct TN_Task *task)唤醒当前正在休眠的任务。

奇怪的是,在非睡眠任务上调用tn_task_wakeup()是合法的;在这种情况下,将设置wakeup_request之类的特殊标志,并且在下次调用tn_task_sleep()时,此标志将被清除,任务将无法休眠。

所有这些在我看来都是一个完全肮脏的黑客,它可能被用作避免竞争条件问题的解决方法,或者作为信号量的hacky替代品。

它只是鼓励程序员采用hacky方法,而不是创建简单的信号量并提供适当的同步。所以,我愿意从我的项目中删除这项服务。这个好主意是摆脱它,还是我错过了一些重要的东西?为什么我们需要它?

1 个答案:

答案 0 :(得分:0)

由于没有人说我错了,我认为我是对的并且删除了这些奇怪的特征"来自我的内核。