rtt线程恢复,关键是第一步是有个:移除当前线程在任意表中的挂钩。
这个就厉害了,避免了重复恢复。
比如我设定一定时间等待某个信号量,等待时的操作:从就绪表中移除当前线程的挂钩,将其挂到信号量的阻塞链表中。 若等待时间到了,那就执行线程超时函数恢复当前线程:移除当前线程的挂钩挂到的表,然后把它挂到就绪表上。——这就避免了后面等到了信号量它再次恢复时重复挂——因为我已经从你这个架子上移除了,你看不到我了!信号来了你也找不到我了!这就是链表的好处!
线程恢复的第一个步骤:
判断当前线程是否已恢复,若恢复就不用恢复它了。保证不重复恢复。
第二步骤,移除恢复线程挂在任何阻塞表的钩子,挂到就绪表中。我不管你挂到哪个阻塞表,我移除的操作是不管的,反正我前面判断你不是就绪状态,那肯定挂到一个链表中去了——我不管你这个链表是系统阻塞链表、还是IPC阻塞链表、还是同步阻塞链表等,我不用管,我直接可以把挂钩移除,,从你这个位置的表上拿走,我挂到就绪表上!
第三步,调度,若恢复的线程优先级最高,那执行上下文切换呀,否则不切换。
完事!
RTT线程管理篇——rtt线程恢复
最新推荐文章于 2024-08-23 21:57:06 发布