为什么使用write_lock_irq而不是write_lock用于tasklist_lock?

时间:2013-02-06 00:19:25

标签: c linux locking kernel

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

1 个答案:

答案 0 :(得分:0)

对于在IRQ上下文中使用的锁,必须在保持时禁用IRQ。但是有不同的方法来实现这一目标。

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

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

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