Следуя определению спин-блокировок из здесь , я увидел, что вытеснение отключено, как только какой-либо поток пытается получить спин-блокировку.
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);
}
Я понял, что любой поток, которому удалось получить спин-блокировку, должен отключить вытеснение, чтобы он мог прогрессировать. Я не совсем понимаю, почему поток, который не может получить блокировку, также может отключить вытеснение. Разве официант не должен просто продолжать пытаться в своем кванте, получить преимущество и повторить попытку в следующем слоте?