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