关于定时器的pending

一个处于pending状态的定时器是处在处理器的定时器管理队列中正等待被调度执行的定时器对象 。如果一个要被del_timer函数删除的timer对象已经被调度执行了(内核源码称这种定时器状态为inactive),函数将直接返回0,否则函数将通过detach_timer将该定时器对象从队列中删除掉。在多处理器的SMP系统中,del_timer_sync函数要完成的任务除了同del_timer一样从定时器队列中删除一个定时器对象外,它还会确保当函数返回时系统中没有任何处理器正在执行定时器对象上的定时器函数,而如果只是调用del_timer,那么当del_timer函数返回时,被删除的定时器对象的定时器函数可能正在其他处理器上运行。”

所以timer_pending是用来判断一个处在定时器管理队列中的定时器对象是否已经被调度执行,add_timer只是把一个定时器对象加入到内核的管理队列,但是何时执行实际上由时钟中断(更确切地,是内核在时钟中断的softirq部分才开始扫描定时器管理队列),一个定时器对象pending意味着它的回调函数尚未被调度执行,而一旦一个定时器对象被调度执行,之后它将被从定时器管理队列中摘除,除非它再次被提交。

你可能感兴趣的:(timer,任务)