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左右,而实际上互斥锁的一种可能的实现是先自旋一段时间,超时后再睡眠等待,因此在并发运算中使用互斥锁(每次占用锁的时间很短)的效果不亚于使用自旋锁。
--- 此部分引用自百度百科