原理

首先,spinlock是一把锁,它的功能与其他锁的作用类似,都是对用于临界区进行原子读写。使用这把锁时,原理上就是不停的循环检查锁的状态,直到可用的时候进入临界区。

与mutex的区别

Spinlock只进行虚幻检查,在内核中仍然允许抢占。

Mutex会立即引起调度,因而在一些中断处理函数中会出问题。

注意:

由于是循环检查而已,因此临界区的大小应该限制,否则非常影响效率。

选择自旋锁时,要注意考虑中断(软中断与硬中断;timer中断属于软中断)

函数和宏定义

头文件

#include

静态初始化

spinlock_t a_lock = SPIN_LOCK_UNLOCKED;

宏定义和函数

动态初始化:

spin_lock_init(&a_lock);

判断自旋锁是否上锁:

spin_is_locked(&a_lock);

等待直到spinlock解锁

spin_unlock_wait(&a_lock);

进入和退出临界区

spin_lock(&a_lock);

spin_unlock(&a_lock);

保存状态寄存器值地进入和退出临界区

int flags;

spin_lock_irqsave(&a_lock, flags);

spin_unlock_irqrestore(&a_lock, flags);

屏蔽硬件中断地进入和退出临界区

spin_lock_irq(&a_lock);

spin_unlock_irq(&a_lock);

屏蔽底半部中断地进入和退出临界区

spin_lock_bh(&a_lock);

spin_unlock_bh(&a_lock);

php 自旋锁,Linux内核自旋锁使用笔记相关推荐

  1. Linux内核自旋锁使用笔记

    Reference: spin_lock_bh()与spin_unlock_bh() Linux内核自旋锁 Linux自旋锁 Spinlock - Wikipedia, the free encycl ...

  2. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  3. Linux内核自旋锁

    Linux内核自旋锁 自旋锁 自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU ...

  4. 大话Linux内核中锁机制之原子操作、自旋锁【转】

    转自:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实 ...

  5. Linux内核中锁机制之完成量、互斥量

    在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...

  6. linux 信号量锁 内核,Linux内核中锁机制之信号量、读写信号量

    在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程 ...

  7. linux内核互斥锁

    Linux内核互斥锁–mutex 一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实 ...

  8. Linux内核源代码情景分析笔记

    Linux内核源代码情景分析笔记 好吧,首先我承认我要是读者的话,这篇文章我看着也头疼,因为写的太长太泛(其主要部分集中在内存管理,进程管理,文件系统)!原本是想按自己理解的精简精简的,按照操作系统中 ...

  9. linux内核源码分析笔记

    一.内核源码目录结构 1.Linux 内核源代码包括三个主要部分 1)内核核心代码:包括linux内核整体架构分析笔记描述的各子系统和子模块,以及其他支撑子系统,如:电源管理.linux初始化等. 2 ...

最新文章

  1. 移动WebApp开发-phoneGap+android入门
  2. 什么是VB.NET的结构化异常处理
  3. [蓝桥杯][2014年第五届真题]地宫取宝(记忆化搜索)
  4. 开发者们都在关注的网站
  5. cpn tools查看运行时间_Jmeter在Linux下的运行测试
  6. 优雅的实现对外接口,要注意哪些问题?
  7. 单片机C语言程序设计心得,单片机课程设计心得体会
  8. 摩尔庄园服务器维护,《摩尔庄园》6月11日维护公告
  9. 专家称摩尔定律将于2022年失效
  10. mysql 创建数据库 utf8 命令_mysql创建数据库 utf8
  11. 如何下载Eclipse?
  12. 分布式事务介绍以及几种方式对比
  13. 4步讲解一维数组传参与二维数组传参
  14. 关于三线SPI驱动ST7789V
  15. 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
  16. 逆商助你回顾2019年迎面2020年
  17. 通达信资金净流入公式_资金净流入选股公式源码-通达信公式 -程序化交易(CXH99.COM)...
  18. 域名解析出现错误,该如何解决?
  19. 解决maven pom依赖的jar无法从私服下载问题【复制大法】
  20. linux 温度控制软件,linux下的cpu温度监控软件 lm-sensors

热门文章

  1. leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
  2. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
  3. Python获取当前目录和上级目录
  4. 【Servlet】总结 JSP的四大域对象、Servlet的四个作用域:pageContext、request、session、application
  5. 深入理解java的泛型
  6. MyBatis拦截器原理探究
  7. Linux网络编程 之 IO复用epoll(十)
  8. JUC队列-ConcurrentLinkedQueue(四)
  9. 通俗易懂,Maven依赖pom中的scope详解
  10. 【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八