自旋锁

1:自旋锁是忙等待锁,,锁不可用时,cpu一直循环执行测试并设置改锁直到获得该锁,CPU忙等待不做任何操作,仅仅是忙等待因此只有在占用锁极短的情况下,使用自旋锁才是合理的,当临界区很大或者有共享设备的时候需要长时间占用该锁,使用自旋锁就会降低系统性能。
2:自旋锁可能导致系统死锁。引发这个问题最常见的情况是递归使用一个自旋锁,即如果一个已经拥有某个自旋锁的CPU想第二次获取这个自旋锁则该CPU将死锁。
3:自旋锁锁定期间不能调用可能引起进程调度的函数,如果获取自旋锁之后再阻塞,如调用copy_from_user,copy_to_user kmalloc,msleep等函数将会引起内核崩溃
4:在单核情况下编程的时候也应该认为自己的CPU是多核的,驱动特别强调跨平台的概念,比如在单CPU的情况下,若中断和进程可能访问同一临界区,进程里调用spin_lock_irqsave()是安全的,在中断里即使不调用spin_lock也是没有问题的因为spin_lock_irqsave()是保证中断被禁止的,但是如果是多核CPU函数spin_lock_irqsave()不能屏蔽另一个核的中断,所以另一个核可能造成并发问题,因此无论如何在中断服务函数里也应该调用spin_lock

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值