自旋锁:
和信号量不同的是自旋锁可在不能休眠的代码中使用,如中断处理例程。在正确使用时,自旋锁通常比信号量具有更高的性能。
如果锁可用,则锁定位被设置,代码继续进入临界区;相反则代码进入忙循环并重复检查锁,直到该锁可用。
所有自旋锁在本质上是不可中断的,一旦调用了spin_lock,在获得锁之前一直处于自旋状态。
自旋锁的实现由于linux所支持的架构不同而不同。
自旋锁的核心规则是:任何拥有自旋锁的代码必须是原子的。自旋锁不能休眠。
自旋锁必须在可能的最短时间内拥有。
头文件:<linux/spinlock.h>
初始化:
静态:spinlock_t lock;
动态:void spin_lock_init(spinlock_t *lock);
获取锁:
void spin_lock(spinlock_t *lock);
void spin_lock_irqsave(spinlock_t *lock, unsigned long flags);
获得自旋锁之前禁止中断,先前的中断状态保存在flags中。
void spin_lock_irq(spinlock_t *lock);
确保释放自旋锁时应该启用中断时调用。
void spin_lock_bh(spinlock_t *lock);
获得锁之前禁止软件中断。
释放锁:
void spin_unlock(spinlock_t *lock);
void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);
void spin_unlock_irq(spinlock_t *lock);</

最低0.47元/天 解锁文章
456

被折叠的 条评论
为什么被折叠?



