【问题标题】:Avoid spinlock deadlock避免自旋锁死锁
【发布时间】:2013-08-31 22:47:43
【问题描述】:

想象一个设备函数拥有一个自旋锁来控制对设备的访问。当锁被持有时,设备会发出一个中断,这会导致一个中断处理程序运行。中断处理程序,在访问设备之前,也必须获得锁。

假设中断处理程序与最初取出锁的代码在同一处理器中执行。

知道持有自旋锁会禁用相关处理器上的抢占,那么持有自旋锁的代码是否有可能在另一个处理器上执行(因为该处理器上的抢占)? (我们假设这是一台 SMP 机器)

【问题讨论】:

    标签: linux-kernel linux-device-driver


    【解决方案1】:
    是否有可能保存自旋锁的代码在另一个处理器上执行(因为该处理器上的抢占)?

    不,代码只是一直在等待中断处理程序返回。

    如果您还想防止软中断/任务小程序,只需使用spin_lock_irq*()spin_lock_bh()

    【讨论】:

      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 2020-10-25
      • 2012-10-30
      • 1970-01-01
      • 2011-04-10
      • 2013-06-07
      • 2013-07-24
      • 2012-08-14
      相关资源
      最近更新 更多