Linux 设备驱动中的并发控制
来源:互联网 发布:java http json接口 编辑:程序博客网 时间:2024/04/30 10:08
一)并发与竞争
并发:是指几个进程同时在一个处理机上运行
竞争:是指两个或者以上的进程同时访问同一个资源而产生的。
并发的控制机制:原子变量操作、自旋锁、信号量、完成量。
二)原子变量操作
原子变量操作原理:原子操作,意思是,要么不执行,要执行就要执行完,在执行的过程中不被打断。需要硬件的支持,是架构相关的,类型和操作在 include/asm/atomic.h里定义,是用汇编语音来实现的。
原子变量的定义
typedef struct{
volatile int counter;
} atomic_t;
使用volatile,编译器就不要对该类型进行优化,对该变量的访问只能是基于内存的,不要缓冲到寄存器。通过这样的类型定义的变量,不能直接加1或者减1,而要利用linux的对应的函数
三)自旋锁
原子操作不能满足复杂的内核设计需求,因此有必要提供别的机制,锁就是方式。Linux一般认为有2种锁:自旋锁和信号量。
自旋锁使用:
首先定义: spinlock_t lock;
初始化: spin_lock_init(lock);
锁定:spin_lock(&lock);
临界区
解锁:spin_unlock(&lock);
注意事项:自旋锁是一种忙等待;自旋锁不能递归使用
四)信号量
信号量也是一种锁,有两种信号量:一种用于内核程序中,一种用于应用程序中。
信号量与自旋锁的区别在于:自旋锁是一种循环等待的机制;而信号量发现被锁了,就睡眠,直到被唤醒。这就要求能睡眠的进程才能使用信号量。
信号量是基于自旋锁来实现的
信号量的使用:
定义:semaphore sem;
初始化: init_MUTEX(sem);
锁定:down(&sem)
解锁:up(&sem);
- Linux设备驱动中的并发控制
- Linux设备驱动中的并发控制
- Linux 设备驱动中的并发控制
- linux设备驱动中的并发控制
- Linux设备驱动中的并发控制
- Linux设备驱动中的并发控制总结
- linux设备驱动中的并发控制
- Linux设备驱动中的并发控制
- linux设备驱动中的并发控制
- Linux设备驱动中的并发控制
- Linux设备驱动中的并发控制总结
- Linux设备驱动中的并发控制---信号量
- linux设备驱动中的并发控制总结
- linux设备驱动中的并发控制
- Linux设备驱动中的并发控制总结
- Linux设备驱动中的并发控制总结
- linux设备驱动中的并发控制
- linux设备驱动中的并发控制
- 集训队专题(1)1005 Ancient Printer
- 运用人性,七情六欲聊运营
- NOIP 模拟练习题 收费站
- Android中attr自定义属性详解
- codeforces 616C The Labyrinth
- Linux 设备驱动中的并发控制
- 苹果电脑Finder中用户选项显示
- php命名空间的详细说明
- Android注解式开发BufferKnife的使用
- struct/union内存对齐
- 解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化问题
- Java - String, StringBuffer and StringBuilder
- UITableView的数据源设置和简单介绍
- php ffmepg.php 扩展