1

我正在查看一些使用add_timerdel_timer启动和停止计时器的 Linux 内核模块代码。

有时,在调用 del_timer 之后,实现会继续删除计时器“对象”(结构 timer_list )。

我想知道这是否安全。请注意,这是一个单处理器实现,禁用了 SMP(这将强制使用del_timer_sync)。

del_timer_sync 实现检查计时器是否正在任何地方处理,但 del_timer 没有。在 UP 系统上,是否可以在不知道 del_timer 的情况下处理计时器,即计时器已从挂起的计时器列表中删除并正在处理?

4

1 回答 1

1

UP 让事情变得相当简单,但我认为答案仍然是“视情况而定”。

如果您del_timer在进程上下文中进行操作,那么在 UP 上,我认为您可以安全地假设计时器在返回后没有在任何地方运行:计时器从待处理列表中删除并从计时器中断中运行,如果该中断开始,它将在允许进程上下文代码继续之前运行完成。

但是,如果您处于中断上下文中,那么您的中断可能已经中断了计时器中断,因此计时器可能正在运行。

于 2012-08-22T21:13:41.500 回答