【问题标题】:spinlock shared between process and interrupt context在进程和中断上下文之间共享自旋锁
【发布时间】:2014-07-01 00:44:42
【问题描述】:

如果进程上下文中持有自旋锁。如果在中断上下文中需要相同的自旋锁会发生什么?

中断处理程序等待直到进程释放自旋锁,或者中断处理程序将它安排在另一个处理器上?正如stackoverflow中的以下线程所述。

但问题还是一样,中断处理程序会等待自旋锁被释放吗?不是吗?

【问题讨论】:

  • 我建议您将任何示例代码添加到此 Q 中。否则它可能会因缺乏努力/研究而关闭。
  • 我没有任何示例代码,我很好奇是否有任何示例可以理解这一点。我已经通过“LKD”,但它告诉如果你在 tasklet 和中断处理程序之间共享数据,你必须使用自旋锁。

标签: spinlock


【解决方案1】:

如果进程上下文中持有自旋锁。如果 中断上下文中是否需要相同的自旋锁?

简而言之,这是一个糟糕的设计,会导致死锁。这就是为什么有 API spin_lock_irq/spin_lock_irqsave 在获取此类锁之前禁用中断并避免此类争用的原因。

【讨论】:

  • 如果我没记错,那就意味着我们必须禁用所有 CPU 上的中断。但我认为这是不应该的。
  • 正如我在上述问题中给出的链接,其中“Roland”表示在两个上下文之间共享锁是非常普遍和好主意。
  • 是的,这很好,但我认为你无法将他所说的和我的意思联系起来。如果你遇到了进程和中断共享锁的情况,你应该在获取锁之前禁用中断(使用我上面提到的API)。
  • 这是否意味着必须在所有处理器上禁用中断?在那种情况下,中断会丢失或在某处缓冲?
  • 还有一个疑问,如果这个中断被安排在另一个处理器上会发生什么?而在当前处理器上,锁已被进程持有。
猜你喜欢
  • 2014-10-22
  • 2013-07-10
  • 1970-01-01
  • 2017-05-04
  • 2015-11-07
  • 1970-01-01
  • 2013-03-12
  • 2020-05-13
  • 2021-10-10
相关资源
最近更新 更多