php 自旋锁,Linux内核自旋锁使用笔记
原理
首先,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内核自旋锁使用笔记相关推荐
- Linux内核自旋锁使用笔记
Reference: spin_lock_bh()与spin_unlock_bh() Linux内核自旋锁 Linux自旋锁 Spinlock - Wikipedia, the free encycl ...
- linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...
- Linux内核自旋锁
Linux内核自旋锁 自旋锁 自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU ...
- 大话Linux内核中锁机制之原子操作、自旋锁【转】
转自:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实 ...
- Linux内核中锁机制之完成量、互斥量
在上一篇博文中笔者分析了关于信号量.读写信号量的使用及源码实现,接下来本篇博文将讨论有关完成量和互斥量的使用和一些经典问题. 八.完成量 下面讨论完成量的内容,首先需明确完成量表示为一个执行单元需要等 ...
- linux 信号量锁 内核,Linux内核中锁机制之信号量、读写信号量
在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程 ...
- linux内核互斥锁
Linux内核互斥锁–mutex 一.定义: /linux/include/linux/mutex.h 二.作用及访问规则: 互斥锁主要用于实现内核中的互斥访问功能.内核互斥锁是在原子 API 之上实 ...
- Linux内核源代码情景分析笔记
Linux内核源代码情景分析笔记 好吧,首先我承认我要是读者的话,这篇文章我看着也头疼,因为写的太长太泛(其主要部分集中在内存管理,进程管理,文件系统)!原本是想按自己理解的精简精简的,按照操作系统中 ...
- linux内核源码分析笔记
一.内核源码目录结构 1.Linux 内核源代码包括三个主要部分 1)内核核心代码:包括linux内核整体架构分析笔记描述的各子系统和子模块,以及其他支撑子系统,如:电源管理.linux初始化等. 2 ...
最新文章
- 移动WebApp开发-phoneGap+android入门
- 什么是VB.NET的结构化异常处理
- [蓝桥杯][2014年第五届真题]地宫取宝(记忆化搜索)
- 开发者们都在关注的网站
- cpn tools查看运行时间_Jmeter在Linux下的运行测试
- 优雅的实现对外接口,要注意哪些问题?
- 单片机C语言程序设计心得,单片机课程设计心得体会
- 摩尔庄园服务器维护,《摩尔庄园》6月11日维护公告
- 专家称摩尔定律将于2022年失效
- mysql 创建数据库 utf8 命令_mysql创建数据库 utf8
- 如何下载Eclipse?
- 分布式事务介绍以及几种方式对比
- 4步讲解一维数组传参与二维数组传参
- 关于三线SPI驱动ST7789V
- 降龙十八掌搞定rt3070 USB WIFI模块在android2.3平台上上网[基于x210开发板]
- 逆商助你回顾2019年迎面2020年
- 通达信资金净流入公式_资金净流入选股公式源码-通达信公式 -程序化交易(CXH99.COM)...
- 域名解析出现错误,该如何解决?
- 解决maven pom依赖的jar无法从私服下载问题【复制大法】
- linux 温度控制软件,linux下的cpu温度监控软件 lm-sensors
热门文章
- leetcode 519. Random Flip Matrix | 519. 随机翻转矩阵(洗牌算法Fisher–Yates shuffle)
- 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适
- Python获取当前目录和上级目录
- 【Servlet】总结 JSP的四大域对象、Servlet的四个作用域:pageContext、request、session、application
- 深入理解java的泛型
- MyBatis拦截器原理探究
- Linux网络编程 之 IO复用epoll(十)
- JUC队列-ConcurrentLinkedQueue(四)
- 通俗易懂,Maven依赖pom中的scope详解
- 【GIF动画+完整可运行源代码】C++实现 计数排序——十大经典排序算法之八