那些情况该使用它们spin_lock到spin_lock_irqsave
extern spinlock_t lock;
// ...
spin_lock(&lock);
// do something
spin_unlock(&lock);
// in normal run level
extern spinlock_t lock;
// ...
spin_lock(&lock);
// do something
// interrupted by IRQ ...
// in IRQ
extern spinlock_t lock;
spin_lock(&lock);
extern spinlock_t lock;
// ...
cli; // disable interrupt on current CPU
spin_lock(&lock);
// do something
spin_unlock(&lock);
sti; // enable interrupt on current CPU
extern spinlock_t lock;
// ...
spin_lock_irq(&lock);
// do something
spin_unlock_irq(&lock);
// code 1
extern spinlock_t lock1;
// ...
spin_lock_irq(&lock);
// do something
spin_unlock_irq(&lock);
// code 2
extern spinlock_t lock2;
// ...
spin_lock_irq(&lock2);
// do something
spin_unlock_irq(&lock2);
Code 1 Code 2
extern spinlock_t lock1;
// ...
spin_lock_irq(&lock1);
extern spinlock_t lock2;
// ...
spin_lock_irq(&lock1);
// do something
spin_unlock_irq(&lock2);
// do something
spin_unlock_irq(&lock1);
unsigned long flags;
local_irq_save(flags);
spin_lock(&lock);
// do something
spin_unlock(&lock);
local_irq_restore(flags);
spin_lock_irqsave(&lock, flags);
// do something
spin_unlock_irqrestore(&lock, flags);
总结:
如果被保护的共享资源只在进程上下文访问和软中断上下文访问,那么当在进程上下文访问共享资源时,可能被软中断打断,从而可能进入软中断上下文来对被保护的共享资源访问,因此对于这种情况,对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。
spin_lock用于阻止在不同CPU上的执行单元对共享资源的同时访问以及不同进程上下文互相抢占导致的对共享资源的非同步访问,而中断失效和软中断失效却是为了阻止在同一CPU上软中断或中断对共享资源的非同步访问
那些情况该使用它们spin_lock到spin_lock_irqsave相关推荐
- spin_lock到spin_lock_irqsave的使用
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量.在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心. 在Linux kernel中执行的代码大体分n ...
- spin_lock spin_lock_irq spin_lock_irqsave、spin_lock_bh
1,为啥需要自旋锁 很多时候我们并不能采用其他的锁,比如读写锁.互斥锁.信号量等.一方面这些锁会发生上下文切换,他的时间是不可预期的,对于一些简单的.极短的临界区完全是一种性能损耗:另一方面在中断上下 ...
- spin_lock、spin_lock_bh、spin_lock_irq、spin_lock_irqsave的使用
概述 Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量.在Linux中,普通的spinlock由于不带额外的语义,用起来反而要非常小心. 在Linux kernel中执行的代码大体 ...
- 自旋锁spin : spin_lock_irq , spin_lock_irqsave
Spinlock的目的是用来同步SMP中会被多个CPU同时存取的变量.在Linux中,普通的spinlock由于不带额外的语义,是用起来反而要非常小心. 在Linux kernel中执行的代码大体分n ...
- 内核同步机制——自旋锁
由于关键代码区可以跨越了多个函数或数据结构,需要有更通用的同步方法:锁. 内核中最常见的一种锁就是自旋锁.相同的锁可用于多处. 自旋锁可用在不可睡眠的场景,如中断处理函数.自旋锁是一种互斥设备,只有两 ...
- 自旋锁spinlock解析
1 基础概念 自旋锁与相互排斥锁有点类似,仅仅是自旋锁不会引起调用者睡眠.假设自旋锁已经被别的运行单元保持.调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁."自旋"一词就 ...
- Linux内核的同步机制---自旋锁
自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑. ...
- 关于自旋锁的一些文章摘记
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~第一部分~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 现在正在结合一篇文章 http://www.ibm.com/ ...
- Linux kernel同步机制
在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实像多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问,尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上 ...
最新文章
- JavaScript是如何工作的:与WebAssembly比较及其使用场景
- Web负载均衡学习笔记之K8S内Ngnix微服务服务超时问题
- 一文了解P2P的前世今生
- 【机器视觉】 endswitch算子
- js数组如何按照固定的下标去重_js数组去重方法总结
- MultipartFile与File之间的相互转换
- python中casefold()函数的用法
- [渝粤教育] 武汉理工大学 复变函数与积分变换 参考 资料
- go语言编写同时支持Linux和Windows的单文件Web界面文件浏览器filebrowser介绍
- 高并发,我把握不住啊!
- SQLite用户权限
- 巨杉分布式数据库-学习笔记
- 什么是第三方支付公司?
- FOCUS projects 5 Pro(照片景深处理软件)官方正式版V5.34.03722 | 景深合成软件下载
- 《老梁四大名著情商课》笔记- 智商与情商:哪个重,哪个轻
- 感知机实现与门,与非门,或门,异或门
- 当谈论工程师文化时我们在谈些什么
- Postman(07)Postman+OMySQL操作数据库
- 系统集成---技术标准规范(一)
- python下载成功的标志_电脑安装python过后的图标