当前位置: 技术问答>linux和unix
linux动态定时器插入时 我没想明白
来源: 互联网 发布时间:2017-01-29
本文导语: static void internal_add_timer(struct tvec_base *base, struct timer_list *timer) { unsigned long expires = timer->expires; unsigned long idx = expires - base->timer_jiffies; struct list_head *vec; if ...
static void internal_add_timer(struct tvec_base *base, struct timer_list *timer)
{
unsigned long expires = timer->expires;
unsigned long idx = expires - base->timer_jiffies;
struct list_head *vec;
if (idx tv1.vec + i;
} else if (idx tv2.vec + i;
} else if (idx tv3.vec + i;
......
根据idx的值确定这个定时器应被插入到哪一个定时器向量中
这个很好理解
但是 插入的具体位置根据定时器的expires值来决定????这我就不懂了。。。
那在不同时刻的两个定时器 他们的idx在都一样的情况下,因为expires肯定不一样
,那插入的位置会不一样。
如果定时器1的expires=0x00ff 定时器2 = 0x0155 若是他们的idx一样,那定时器2不是被插到定时器1前面去了?
如果定时器1的expires=0x0055 定时器2 = 0x0155 若是他们的idx一样,那定时器2不是被插到定时器1那里去了?
请懂的人指点一下。。。。。。
{
unsigned long expires = timer->expires;
unsigned long idx = expires - base->timer_jiffies;
struct list_head *vec;
if (idx tv1.vec + i;
} else if (idx tv2.vec + i;
} else if (idx tv3.vec + i;
......
根据idx的值确定这个定时器应被插入到哪一个定时器向量中
这个很好理解
但是 插入的具体位置根据定时器的expires值来决定????这我就不懂了。。。
那在不同时刻的两个定时器 他们的idx在都一样的情况下,因为expires肯定不一样
,那插入的位置会不一样。
如果定时器1的expires=0x00ff 定时器2 = 0x0155 若是他们的idx一样,那定时器2不是被插到定时器1前面去了?
如果定时器1的expires=0x0055 定时器2 = 0x0155 若是他们的idx一样,那定时器2不是被插到定时器1那里去了?
请懂的人指点一下。。。。。。
|
这个定时器,肯定的排序啊,要不你每次都要检查一遍所有的定时器。排好序就只要检查最先超时那个就可以了。
那个vec对应的位置是个链表,可以链在一起的,不会覆盖。
那个vec对应的位置是个链表,可以链在一起的,不会覆盖。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。