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且不可抢占式的内核下,自旋锁的操作为空操作。自旋锁适用于锁使用者保持锁时间比较短的情况下。

  • 相关阅读:
    屏蔽鼠标右键/F1帮助
    vs2010如何连接到mysql数据库
    经典的数据库设计贴吧
    js子窗口刷新父窗口
    数据库三大范式
    写给毕业生
    SQL Server权限数据库设计
    .NET
    ASP.NET MVC框架(第一部分) 【转】
    什么是SQL注入法攻击 .
  • 原文地址:https://www.cnblogs.com/chencesc/p/5659483.html
Copyright © 2011-2022 走看看