代码之家  ›  专栏  ›  技术社区  ›  abjoshi - Reinstate Monica

为什么旋转锁服务生会禁用预购?

  •  0
  • abjoshi - Reinstate Monica  · 技术社区  · 7 年前

    在遵循spinlocks的定义时 here ,我看到当任何线程试图获取spinlock时,抢占被禁用。

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

    我知道任何线索 成功 在获取spinlock时,必须禁用抢占,以便它可以继续。我不太明白的是,为什么不能获取锁的线程也可以禁用抢占。服务生不应该继续尝试,抢先一步,然后在下一个时段再试一次吗?

    0 回复  |  直到 7 年前