linux驱动22:自旋锁spinlock

自旋锁:

和信号量不同的是自旋锁可在不能休眠的代码中使用,如中断处理例程。在正确使用时,自旋锁通常比信号量具有更高的性能。

如果锁可用,则锁定位被设置,代码继续进入临界区;相反则代码进入忙循环并重复检查锁,直到该锁可用。

所有自旋锁在本质上是不可中断的,一旦调用了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);</

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值