Android深度探索:HAL与驱动开发学习笔记--并发控制之互斥锁

看了大概几张主要是几种临界区的保护锁讲解,我们驱动中用到最多最好的就是互斥锁了,其他的尽量少用:

互斥锁:

互斥锁是为了替代信号量,修改于2.6.10-2.6.22。参考:http://blog.chinaunix.net/uid-26023319-id-2980285.html
不能嵌套锁,不能使用在tasklet或则timer这样的中断上下文中。
互斥锁主要函数:
//创建互斥锁
DEFINE_MUTEX(mutexname);
//加锁,如果加锁不成功,会阻塞当前进程
void mutex_lock(struct mutex *lock);
//解锁
void mutex_unlock(struct mutex *lock);
//尝试加锁,会立即返回,不会阻塞进程
int mutex_trylock(struct mutex *lock);


DECLARE_MUTEX宏会误导开发者,所以建议将DECLARE_MUTEX修改成DEFINE_SEMAPHORE,这个提议最终被内核社区所接受,在2.6.36版本后的内核就没有DECLARE_MUTEX这个宏了,取而代之的是DEFINE_SEMAPHORE宏,在后来同互斥信号量相关的init_MUTEX、init_MUTEX_LOCKED也从<linux/semaphore.h>文件中移除了。
互斥锁实际的效率还是可以让人接受的,加锁时间大概是100ns左右,而实际上互斥锁的一种可能的实现是先自旋一段时间,超时后再睡眠等待,因此在并发运算中使用互斥锁(每次占用锁的时间很短)的效果不亚于使用自旋锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值