Почему официанты спин-блокировки отключают опережение? - PullRequest
0 голосов
/ 02 ноября 2018

Следуя определению спин-блокировок из здесь , я увидел, что вытеснение отключено, как только какой-либо поток пытается получить спин-блокировку.

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);
}

Я понял, что любой поток, которому удалось получить спин-блокировку, должен отключить вытеснение, чтобы он мог прогрессировать. Я не совсем понимаю, почему поток, который не может получить блокировку, также может отключить вытеснение. Разве официант не должен просто продолжать пытаться в своем кванте, получить преимущество и повторить попытку в следующем слоте?

...