一、简介与使用
自旋锁适用于用于保护短的代码段,通过spinlock_t数据结构实现,常用接口如下:
1) spin_lock 和 spin_unlock
2) spin_lock_irqsave 和 spin_unlock_restore: 获取锁的同时还会关中断
3)spin_lock_bh/ spin_unlock_bh : 关软中断
4) spin_trylock 和 spin_trylock_bh 尝试获取锁,但不会阻塞
通常自旋锁使用 SPIN_LOCK_UNLOCKED
进行初始化。
二、注意事项
1) 自旋锁保护的临界区不宜过长(比如加入打印日志代码)或者调用会睡眠的函数
2) 单CPU系统中,由于会有内核抢占的出现,spin_lock
等价于preempt_disable
。