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
自旋锁
最新推荐文章于 2021-03-16 21:51:40 发布