前一节课时中,我们学习了双向链表数据结构。现在,我们在这节课时中将应用这一结构。
在这节课时中,定义了一个用于管理延时任务的链表,所有需要延时的任务都会插入到这个链表。在后面的课程中我们还可以看到,双向链表还可以用于调度器的多优先级队列、任务等待队列等应用。
主要内容
课程中主要涉及四个要点:
- 定义延时队列
- tTimeTaskWait()将任务插入延时队列
- tTimeWakeUp()将任务从延时队列中移除
- tTimeSystemTickHandler()中遍历整个延时列表,对延时队列进行管理。
在学习过程中,请结合以下两幅图,理解上面三种接口在执行过程中,任务怎样在就绪表和延时队列间转移。
重点难点
注意事项
常见问题
延时队列里面的为什么不让挂起?
Q:延时队列里面的为什么不让挂起?能不能先标记,等延时结束期望加到就绪队列时检查这个标记,有标记就在此时挂起而不是加入就绪队列。
A:这个属于设计策略方面的问题。如果你觉得想这么设计,那是可以的,只要看下有没有问题,然后是不是好实现。并不是说只能采用某一种实现。所以你看有些功能,在不同的os中,具体实现有不同。