中断中的锁不能进入睡眠,所以一般都用自旋锁。
但是在中断中使用自旋锁时,必须禁止当前CPU的其他中断,如可以使用:
spin_lock_irqsave();
//临界区
spin_unlock_irqrestore();
这个自旋锁函数,可以保存进入自旋锁前的当前CPU的中断状态,然后禁止本地中断(local_irq_disable -- 即禁止当前CPU的中断),出临界区之后,又会还原回进入临界区之前的中断状态。
下面这对自旋锁,进入临界区之前,会禁止所有中断,出临界区之后,会使能所有中断。
spin_lock_irq()
// 临界区
spin_unlock_irq()
中断中自旋锁使用详解

本文详细介绍了在中断上下文中如何使用自旋锁来保护临界区,并确保数据的一致性和完整性。为了防止在自旋锁持有期间发生中断导致的潜在问题,文章解释了如何通过禁用和恢复中断来实现这一点。

被折叠的 条评论
为什么被折叠?



