自旋锁

自旋锁只能被一个执行线程占有,如果另一个线程去获取一个已经占有的自旋锁,则该线程会进行忙等待,可以理解为C中的while(1){检查锁是否可用}


自旋锁的接口头文件为linux/spinlock.h  其实现在asm/spinlock.h


注意:Linux下实现的自旋锁是不可递归的.如果你获取一个自己占用的自旋锁,则会造成死锁.


自旋锁可以使用在中断中,中断中不可以使用信号量


在使用自旋锁之间应该禁止中断.可以设想你获取了一个自旋锁,然后中断发生,执行中断处理程序,此时中断处理程序获取你占用的自旋锁,中断处理必须忙等待.若中断不结束,你永远不会执行,所以不可能释放锁,所以死锁.


一个被争用的自旋锁使得请求他的线程在等待锁重新可用时自旋,这种行为是自旋锁的要点.所以自旋锁不应该被长期持有.


自旋锁用于多个CPU系统中,在单处理器系统中,自旋锁不起锁的作用,只是禁止或启用内核抢占。在自旋锁忙等待期间,内核抢占机制还是有效的,等待自旋锁释放的线程可能被更高优先级的线程抢占CPU


针对自旋锁的操作

1.自旋锁的初始化

# define spin_lock_init(lock) \
 do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值