Mic_chen

It is not the strongest of the species that survive, nor the most intelligent, but the one most responsive to change

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、自旋锁:参考博文https://blog.csdn.net/helloguoqijun/article/details/77489317

     自旋锁是一种轻量级的互斥锁,可以更高效的对互斥资源进行保护。在短期间内进行轻量级的锁定。

     和信号量、互斥锁的比较:

     缺点:请求它的线程在等待锁重新可用的期间进行自旋(特别浪费处理器时间),所以自旋锁不应该被持有时间过长。如果需要长时间锁定的话, 最好使用信号量

     优点:自旋锁是一种轻量级的互斥锁,可以更高效的对互斥资源进行保护,会关闭系统抢占或者本地中断,因此减少死锁的问题。互斥锁需要做任务切换,阻塞的情况下自旋锁的效率就远高于互斥锁。

     各API的比较: spin_lock为了防止内核的抢占死锁,spin_lock_irq为了防止内核和中断的抢占死锁,spin_lock_irqsave为了防止进入自旋状态丢掉之前的中断状态。

  自旋锁主要针对SMP或单CPU但内核可抢占的情况, 对于单CPU和内核不支持抢占的系统, 自旋锁退化为空操作。 在单CPU和内核可抢占的系统中, 自旋锁持有期间中内核的抢占将被禁止。 由于内核可抢占的单CPU系统的行为实际上很类似于SMP系统, 因此, 在这样的单CPU系统中使用自旋锁仍十分必要。 另外, 在多核SMP的情况下, 任何一个核拿到了自旋锁, 该核上的抢占调度也暂时禁止了, 但是没有禁止另外一个核的抢占调度

从内核代码include/linux/spinlock_api_smp.h可以看到

2、信号

  获得信号量sem, 它会导致睡眠, 因此不能在中断上下文中使用。

 

posted on 2022-07-20 11:51  Mic_chen  阅读(36)  评论(0编辑  收藏  举报