zoukankan      html  css  js  c++  java
  • spin_lock 和 spin_lock_irqsave

    一  、spin_lock_irqsave 、 spin_unlock_irqrestore

    如果自旋锁在中断处理函数中被用到,那么在获取该锁之前需要关闭本地中断,spin_lock_irqsave 只是下列动作的一个便利接口:
    1 保存本地中断状态
    2 关闭本地中断
    3 获取自旋锁

    解锁时通过 spin_unlock_irqrestore完成释放锁、恢复本地中断到之前的状态等工作


    二  、spin_lock_irq 和 spin_unlock_irq


    如果你确定在获取锁之前本地中断是关闭的,那么就不需要保存中断状态,解锁的时候直接将本地中断启用就可以啦

    三 、 总结

    自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠

    自旋锁一直占用CPU,他在未获得锁的情况下,一直运行

    在用自旋锁时有可能造成死锁,当递归调用时有可能造成死锁,调用有些其他函数也可能造成死锁,如 copy_to_user()、copy_from_user()、kmalloc()等。

    因此我们要慎重使用自旋锁,自旋锁只有在内核可抢占式或SMP的情况下才真正需要,在单CPU且不可抢占式的内核下,自旋锁的操作为空操作。自旋锁适用于锁使用者保持锁时间比较短的情况下。

  • 相关阅读:
    set使用
    css盒子模型详解一
    列表页调用当前栏目的子类织梦标签
    织梦如何在导航栏下拉菜单中调用当前栏目子类
    HDU1812
    BZOJ1485: [HNOI2009]有趣的数列
    组合数学学习笔记
    Full_of_Boys训练2总结
    Full_of_Boys训练1总结
    FFT算法学习笔记
  • 原文地址:https://www.cnblogs.com/chencesc/p/5659483.html
Copyright © 2011-2022 走看看