打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用自旋锁注意事项
userphoto

2022.11.23 北京

关注

驱动工程师应当谨慎使用自旋锁,而且在使用中还要特别注意如下几个问题。

  1)自旋锁实际上是忙等待,当锁不可用时,CPU一直循环执行“测试并设置”该锁直到可用而取得该锁,CPU在等待自旋锁时不做任何有用的工作,仅仅是等待。因此,只有在占用锁的时间极短的情况下,使用自旋锁才是合理的。当临界区很大,或有共享设备的时候,需要较长时间占用锁,使用自旋锁会降低系统的性能。

  2)自旋锁可能导致系统死锁。引发这个问题最常见的情况是递归使用自旋锁,即一个已经拥有某个自旋锁的CPU想要第二次获得这个自旋锁,则该CPU将自锁。

  3)在自旋锁锁定期间不能调用可能引起进程调度的函数。如果进程获得自旋锁之后再阻塞,如调用copy_form_user()、copy_to_user()、kmalloc()和msleep()等函数,则可能导致内核崩溃,

  4)在单核情况下编程的时候,也应该认为自己的CPU是多核的,驱动特别强调跨平台的概念。比如,在单CPU的情况下,若中断和进程可能访问同一临界区,进程里调用spin_lock_irqsave()是安全的,在中断里其实不调用spin_lock()也没有问题,因为spIn_lock_irqsave()可以保证这个CPU的中断服务函数不可能执行。但是,若CPU变成多核,spin_lock_irqsave()不能屏蔽另外一个核的中断,所以另外一个核就可能造成并发问题。因此,无论如何,我们在中断服务程序里也应该调用spin_lock()。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析
[转]spinlock 理解
信号量/锁
Linux锁机制
Linux驱动程序开发(5) - Linux内核同步介绍和方法(1)
信号量和互斥锁
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服