互斥mutex与spinlock的对比

文章讨论了在多线程场景中,spinlock(自旋锁)与mutex(互斥锁)的使用,强调spinlock在避免线程切换浪费时间的优势,以及它们在中断函数中的限制。同时提到了死锁问题,当低优先级任务持有锁且高优先级任务无法获取时可能导致的困境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        多线程场景下,单纯的对访问资源进行串行访问限制,可以用互斥。但互斥中,某个线程mutex在没有得到锁的情况下,会sleep,也就是说cpu会切换线程;

        但有些场景下等一下可能就得到锁了,而等一下的耗时可能比线程切换时间还短。这时就该spinlock上场了,spinlock在没有拿到锁时,会在原地等待,直到获取到锁。比如在while循环不断原子操作查看lock的值)

注意:针对多CPU(存在资源抢占的情况)使用spinlock才有意义。

mutex这种会休眠的互斥锁,不能用于中断函数;同理信号量内部也是用互斥锁mutex实现的,所以在中断函数中也不能用信号量。

关于死锁问题:

如果一个低优先级的任务使用spinlock抢占了资源,但一个更高优先级的任务调度了,也要获取这个锁,但锁在低优先级任务手里,但它一直没有机会执行,也就释放不了锁。这时就死锁了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字正腔圆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值