1

在 Linux Kernel 中,读/写自旋锁用于同步访问任务列表。然而,read_(un)lock 用于读取,而 write_(un)lock_irq 用于写入。为什么在锁定写入时需要禁用中断?

4

1 回答 1

0

对于曾经在 IRQ 上下文中使用过的锁,IRQ 在持有时必须被禁用。但是有不同的方法可以实现这一点。

(我描述的是自旋锁,读/写锁在这方面是一样的)

  • spin_[un]lock不要禁用 IRQ。仅当您知道它们已被禁用时才使用它们(例如在中断处理程序中)。
  • spin_[un]lock_irq禁用/启用 IRQ。只有在调用函数之前知道它们没有被禁用时才使用它们。
  • sping[un]lock_irq[save|restore]- 禁用 IRQ,然后返回之前的状态。无论 IRQ 状态如何,都可以使用(成本很低)。

我猜你看到的差异是由于不同的调用上下文,而不是读/写差异。

于 2013-02-06T08:28:32.170 回答