自旋锁和互斥锁的区别
注意点:
1 互斥锁会在等待期间放弃cpu(因为在尝试获得 $ 的时候就
禁止抢占)
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 自旋锁 对比 互斥锁少了线程的调度,也是节省了成本。
spin_lock 在单cpu 上 禁止抢占 preempt_disable
spin_lock_irq 在单cpu 上 关本地中断 local_irq_disable 再 禁止抢占 preempt_disable