[转]自旋锁与信号量

本文详细解析了自旋锁与信号量的工作原理及应用场景。自旋锁仅具有LOCKED与UNLOCKED两种状态,适用于多核SMP环境下的临界区保护,通过忙等待实现快速响应。信号量不仅可用作互斥锁,还能作为资源计数器,具有多种状态,进程获取失败时会进入睡眠状态。文章还讨论了它们在单核环境和中断上下文的使用限制。
摘要由CSDN通过智能技术生成

https://blog.csdn.net/zhangxin1250/article/details/40342371
自旋锁只有两种状态,即LOCKED与UNLOCKED。
而信号量既可以作为互斥锁来使用(此时具有0和1两种状态),也可以作为资源计数器来使用(此时为正整数,具有不同的值,例如:0,1,2,...)
进程在获取自旋锁时,会持续地查询锁的状态(读改写的原子操作),若未获取到锁则CPU会处于一直忙等待状态,这正是“自旋”的含义。
进程在获取信号量时,如果没有获取到则会转入睡眠状态,在未来的某个时间进程被唤醒并重新获取信号量。
自旋锁原本用于多核SMP环境下,在并发时进行临界区的保护,以上第2点讲到的忙等待就是这个情形下的经典操作。但是在单核环境下,其经典操作会有些不同。
在单核的情形下,若开了抢占功能,则其等同于SMP的环境,也需要考虑并发的问题,采用禁止抢占来加锁,采用使能抢占来解锁。
在单核的情形下,若没有开抢占功能,则自旋锁被优化为什么也不做。
在中断上下文(软中断,硬中断)使用自旋锁,需要使用带有中断操作的自旋锁版本。
自旋锁可以用在中断上下文。
但是信号量不能用在中断上下文,因为它会睡眠,这是不允许的。

转载于:https://www.cnblogs.com/jinliang-li/p/11379081.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值