linux驱动之自旋锁(spinlock)
2015-09-08 19:30
471 查看
自旋锁是类似于信号量的,同样是对设备的访问进行干预,自旋锁是一个互斥的,只能是上锁后设备不可用,解锁后可用。当某一个设备被自旋锁锁定时,其他的进程需要访问设备时会进入一个忙循环的等待状态,知道设备的自旋锁释放后方可对设备进行访问。
在自旋锁锁住设备进行操作时,这些个操作一般都是比较简单,费时少,而且做到不要休眠,拥有自旋锁时禁止当前所用处理器上的CPU的中断。
具体用法是
1.包含
在自旋锁锁住设备进行操作时,这些个操作一般都是比较简单,费时少,而且做到不要休眠,拥有自旋锁时禁止当前所用处理器上的CPU的中断。
具体用法是
1.包含
Spinlock.h (include\linux)2.初始化spinlock,当然你得先定义一个自旋锁,spinlock_t lock
#define spin_lock_init(_lock) \ do { \ spinlock_check(_lock); \ raw_spin_lock_init(&(_lock)->rlock); \ } while (0)3.上锁spin_lock_irqsave(lock, flags),其中flags是你定义的一个变量,这个函数会关闭当前处理器上(单核)所有的中断
#define spin_lock_irqsave(lock, flags) \ do { \ raw_spin_lock_irqsave(spinlock_check(lock), flags); \ } while (0)4.解锁spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags)
static inline void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags) { <span style="white-space:pre"> </span>raw_spin_unlock_irqrestore(&lock->rlock, flags); }这个是一般的用法,当然在tasklet中,需要我们将 spin_lock_irqsave(lock, flags),替换成spin_unlock_bh(spinlock_t *lock),以及解锁用spin_unlock_bh(&gact->tcf_lock);
相关文章推荐
- RHEL 6.5 升级内核至linux kernel-4.0.5
- Linux守护进程
- linux下rsync的使用
- linux常用命令(22):find 命令的参数详解
- linux常用命令(21):find命令之xargs
- CentOS7中firewall防火墙详解和配置,.xml服务配置详解
- linux常用命令(20):find命令之exec
- windows下安装vmware10并在虚拟机上安装linux步骤
- 浅析 Linux 初始化 init 系统,第 3 部分: Systemd
- screen(CentOS 7系统远程会话管理工具)
- 查看linux硬件信息
- 木头骑士的Linux编程实验室(二)——基本的文件读写操作
- Linux下VLAN功能的实现
- linux常用命令(19):find命令概览
- Linux进程管理及进程管理工具的使用
- 2015年9月5日课程作业(at、crontab)
- 编译器的工作过程
- linux 上创建不了模拟器
- CentOS 7 关闭防火墙 SELinux , FireWalld
- 在CentOS 6.3 64bit上搭建python高性能框架gevent开发环境