在 Linux Kernel 中,读/写自旋锁用于同步访问任务列表。然而,read_(un)lock 用于读取,而 write_(un)lock_irq 用于写入。为什么在锁定写入时需要禁用中断?
问问题
752 次
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 回答