linux驱动中的互斥途径五:互斥锁

mutex

1. 互斥锁

1.1 概念:

        为了保证共享数据的完整性,在编程中引入了互斥锁的概念,用来保证在任一时刻只能有一个线程访问该对象。

使用的时候需要注意的问题:

1. 是睡眠等待锁。

2. 函数:

定义和初始化
struct mutex my_mutex;
mutex_init(&my_mutex);

获取
void inline _ _sched mutex_lock(struct mutex *lock);
int _ _sched mutex_lock_interruptible(struct mutex *lock);
int _ _sched mutex_trylock(struct mutex *lock);

mutex_lock()与 mutex_lock_interruptible()的区别和
down()与 down_trylock()的区别完全一致,
前者引起的睡眠不能被信号打断,而后者可以。
mutex_trylock()用于尝试获得 mutex,获取不到
mutex 时不会引起进程睡眠。

释放
void __sched mutex_unlock(struct mutex *lock);

3. 使用格式:

struct mutex my_mutex; /* 定义 mutex */
mutex_init(&my_mutex); /* 初始化 mutex */
mutex_lock(&my_mutex); /* 获取 mutex */
.../* 临界资源*/
mutex_unlock(&my_mutex); /* 释放 mutex */

4. 互斥锁的相关实现和效率问题:

互斥锁实际的效率还是可以让人接受的,加锁时间大概是100ns左右,而实际上互斥锁的一种可能的实现是先自旋一段时间,超时后再睡眠等待,因此在并发运算中使用互斥锁(每次占用锁的时间很短)的效果不亚于使用自旋锁。

--- 此部分引用自百度百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值