在遵循here中对自旋锁的定义之后,我看到,一旦有任何线程尝试获取自旋锁,抢占即被禁用。
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);
}
我知道,成功获取自旋锁的任何线程都必须禁用抢占,以便其可以继续进行。我不太了解的是,为什么无法获取锁的线程也可以禁用抢占。服务员不应该只是继续尝试尝试,抢占先机然后在下一个时段再试一次吗?