自旋锁和信号量的区别

1、自旋锁不能递归
2、自旋锁可以用在中断上下文,但是信号量不可以,因为可能睡眠,但是在中断上下文获取自旋锁之前要先禁用本地中断(防止在自选锁的临界区内发生中断,则有可能出现死锁)。
3、自旋锁的核心要求是:拥有自旋锁的代码不能睡眠,要一直持有CPU到释放自旋锁
4、信号量和读写信号量适用于保持时间较长的情况,他们可能会导致调用者睡眠,因此只能在进程上下文使用。而自旋锁适用于保持时间非常短的情况,他可以在任何上下文使用。
a、如果被保护的共享资源只在进程上下文访问,信号量更合适,如果共享资源非常短,自旋锁亦可。
b、如果被保护的共享资源需要在中断上下文访问,就必须用自旋锁(中断上半部【软中断】,运行在中断上下文,另外下半部分两种:tasklet【小任务】运行在中断上下文,workqueue运行在进程上下问题)。即tasklet中共享资源必须用自旋锁,workqueue必须用信号量。
5、自旋锁应用场景
a、自旋锁保持期间,禁止抢占
b、自旋锁只有在内核可强占或SMP(多处理器)的情况下才真正需要,在单核CPU且不可抢占的内核(历史内核)下,自旋锁的所有操作都是空操作。
c、历史内核情况,中断上下文,没有自选锁的情况下,通过禁止中断的情况下,防止抢占。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值