当前位置: 技术问答>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对应的位置是个链表,可以链在一起的,不会覆盖。