Linux内核spin_lock 要防止该锁在中断处理程序调用

来源:互联网 发布:unity3d 虚幻4 知乎 编辑:程序博客网 时间:2024/05/22 16:03

 
static inline void __raw_spin_lock(raw_spinlock_t *lock)
{
        preempt_disable();
        spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
        LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
}

只关抢占。

static inline void __raw_spin_lock_irq(raw_spinlock_t *lock)
{
        local_irq_disable();
        preempt_disable();
        spin_acquire(&lock->dep_map, 0, 0, _RET_IP_);
        LOCK_CONTENDED(lock, do_raw_spin_trylock, do_raw_spin_lock);
}

关本地中断,并固安抢占。

在使用spin_lock时要明确知道该锁不会在中断处理程序中使用。