信息
- 外文名
- Spin lock
- 概 念
- 保护共享资源
- 中文名
- 自旋锁
- 初 衷
- 在短期间内进行轻量级的锁定
自旋锁概念
何谓自旋锁?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
-
自旋锁
2021-03-10 14:35:041:自旋锁是忙等待锁,,锁不可用时,cpu一直循环执行测试并设置改锁直到获得该锁,CPU忙等待不做任何操作,仅仅是忙等待因此只有在占用锁极短的情况下,使用自旋锁才是合理的,当临界区很大或者有共享设备的时候...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 -
收藏数
9,143
精华内容
3,657