Notez la différence entre le verrouillage de rotation et le verrouillage mutex :
1 verrouillage Mutex abandonnera le processeur pendant la période d'attente (car la
préemption est interdite lors de la tentative d'obtention de $ )
static inline void spin_lock(spinlock_t *lock)
{
/*
* Spin locks also need to be removed in order to eliminate all
* memory barriers. They are only used by the write side anyway.
*/
#ifndef NO_SYNC_SMP_MB
preempt_disable();
lock_impl_lock(&lock->internal_lock);
#endif
}
2 Par rapport aux verrous mutex, les verrous rotatifs réduisent la planification des threads et réduisent les coûts.
spin_lock 在单cpu 上 禁止抢占 preempt_disable
spin_lock_irq 在单cpu 上 关本地中断 local_irq_disable 再 禁止抢占 preempt_disable