国嵌内核驱动进阶班-6-4 竞争与互斥(2)
2015-06-02 22:42
295 查看
并发与竞态
处理并发的机制(信号量和自旋锁)
信号量
1.定义信号量
#include <asm/semaphore.h>
struct semaphore sem;
2.初始化信号量
void sema_init(struct semaphore *sem, int val)
val 为非正数 表明有任务等待信号量
3.锁
int down_interruptible(struct semaphore *sem)
TASK_INTERUPTIBLE
down_killable(struct semaphore *sem)
TASK_KILLABLE
※ down()已经不建议使用
4. 释放
void up(struct semaphore *sem)
互斥锁(特殊的信号量)
1. 初始化互斥锁
void init_MUTEX(struct semaphore *sem) //初始化为1
DECLARE_MUTEX(struct semaphore *sem)//定义并初始化为1
void init_MUTEX_LOCKED(struct semaphore *sem) //初始化为0
DECLARE_MUTEX_LOCKED(struct semaphore *sem)//定义并初始化为0
自旋锁
不会引起调用的睡眠,特点为忙等。
spin_lock_init(x)
spin_lock(lock)
spin_trylock(lock)
spin_unlock(lock)
信号量与自旋锁区别
1. 信号量可以有多个持有者,自旋锁只能有一个持有者。
2. 自旋锁适用于持有时间较短的(忙等的特点)
处理并发的机制(信号量和自旋锁)
信号量
1.定义信号量
#include <asm/semaphore.h>
struct semaphore sem;
2.初始化信号量
void sema_init(struct semaphore *sem, int val)
val 为非正数 表明有任务等待信号量
3.锁
int down_interruptible(struct semaphore *sem)
TASK_INTERUPTIBLE
down_killable(struct semaphore *sem)
TASK_KILLABLE
※ down()已经不建议使用
4. 释放
void up(struct semaphore *sem)
互斥锁(特殊的信号量)
1. 初始化互斥锁
void init_MUTEX(struct semaphore *sem) //初始化为1
DECLARE_MUTEX(struct semaphore *sem)//定义并初始化为1
void init_MUTEX_LOCKED(struct semaphore *sem) //初始化为0
DECLARE_MUTEX_LOCKED(struct semaphore *sem)//定义并初始化为0
自旋锁
不会引起调用的睡眠,特点为忙等。
spin_lock_init(x)
spin_lock(lock)
spin_trylock(lock)
spin_unlock(lock)
信号量与自旋锁区别
1. 信号量可以有多个持有者,自旋锁只能有一个持有者。
2. 自旋锁适用于持有时间较短的(忙等的特点)
相关文章推荐
- sqoop 和mysql相关操作 分类: Linux hadoop 2015-06-02 22:42 38人阅读 评论(0) 收藏
- aspose.cells单元格的货币符显示,颜色及赤字显示
- C#代码小记
- 判断银行账号是否输入正确
- Android学习 - 移动web开发框架
- Excel数据导入到SqlLite中
- 【C/C++】C++11新特性
- 产品经理的核心是啥啊。。
- Junit使用过程中需要注意的诡异bug以及处理办法
- 第一次作业
- GPIO的八种工作模式
- HBase shell
- 再回首,Java温故知新(七):Java基础之运算符
- HBase shell 分类: hadoop 2015-06-02 22:40 33人阅读 评论(0) 收藏
- CodeForces 543B Destroying Roads(最短路 + 枚举)
- 霍宇飞,一个很霸气的名字
- Ubuntu+下构建内核源码树_图文教程
- oracle事务和锁
- 数据挖掘算法总结--核心思想,算法优缺点,应用领域,数据挖掘优缺点
- 知识点扫盲