我正在重写现有的实时内核TNKernel;我已经使用它几年了,但我不喜欢它的许多设计决策(以及实现细节),所以我决定分叉它并享受实现我想要的东西的乐趣。任何有兴趣的人都可以在 bitbucket 的项目页面上阅读更多信息。
在我看来,TNKernel 有一个奇怪的特性:它具有tn_task_sleep(int timeout)
使当前任务进入睡眠状态的服务,并且具有tn_task_wakeup(struct TN_Task *task)
唤醒当前睡眠任务的服务。
奇怪的是,调用tn_task_wakeup()
非睡眠任务是合法的;在这种情况下,特殊标志 likewakeup_request
将被设置,并且在下一次调用tn_task_sleep()
该标志时将被清除,并且任务不会休眠。
在我看来,所有这一切都是一个完全肮脏的 hack,它可能被用作避免竞争条件问题的解决方法,或者作为信号量的 hacky 替代品。
它只是鼓励程序员采用 hacky 方法,而不是创建简单的信号量并提供适当的同步。所以,我愿意从我的项目中删除这项服务。这是摆脱它的好主意,还是我错过了一些重要的事情?为什么我们需要它?