【问题标题】:Can del_timer return while its handler is running?del_timer 可以在其处理程序运行时返回吗?
【发布时间】:2012-08-22 18:05:29
【问题描述】:

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

有时,实现会在调用 del_timer 后立即删除计时器“对象”(struct timer_list)。

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

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

【问题讨论】:

  • 只需使用del_timer_sync(),这样当您或下一个人决定他们实际上想在 SMP 系统上使用此代码时,它不会中断 :)

标签: timer linux-kernel


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多