同add_timer函数相反,del_timer类的函数负责从系统的定时器管理队列中摘除一个定时器对象。del_timer和del_timer_sync的函数原型为:
<kernel/timer.c>
int del_timer(struct timer_list *timer);
int del_timer_sync(struct timer_list *timer);
对于del_timer函数要摘除的定时器对象timer,函数会首先判断该对象是否是一个pending的定时器,一个处于pending状态的定时器是处在处理器的定时器管理队列中正等待被调度执行的定时器对象。如果一个要被del_timer函数删除的timer对象已经被调度执行(内核源码称这种定时器状态为inactive),函数将直接返回0,否则函数将通过detach_timer将该定时器对象从队列中删除。在多处理器的SMP系统中,del_timer_sync函数要完成的任务除了同del_timer一样从定时器队列中删除一个定时器对象外,还会确保当函数返回时系统中没有任何处理器正在执行定时器对象上的定时器函数,而如果只是调用del_timer,那么当函数返回时,被删除的定时器对象的定时器函数可能正在其他处理器上运行。