概要:
锁机制是一种保护共享资源不被多次访问的一种机制。共享资源可以是数据(如:全局变量)也可以是设备(如:GPIO)。
Linux锁的种类:
●互斥锁
●自旋锁
●信号量
本文只对前两种锁进行说明。
互斥锁:
顾名思义,对资源的访问是互斥的。例如:一个线程访问了(lock)一种资源,那么其他线程就不能访问,直到锁被释放(unlock)。
原理:
竞争线程从调度器的运行队列中移出,放入处于睡眠状态的等待链表中。然后内核调度并执行其他任务。当锁被释放时,等待队列中的竞争线程被唤醒,从等待链表中移出,竞争线程被重新调度。
使用方法:
1) 声明:
静态声明:
DEFINE_MUTEX(MyMutex)
动态声明:
struct mutex MyMutex;
mutex_init(&MyMutex);
2) 取得和释放:
取得:
void mutex_lock(struct mutex *lock);
int mutex_lock_interruptible(struct mutex *lock);
linux内核带后缀_interruptible,意味着如果收到信号,则函数等待将被打断。
int mutex_lock_killable(struct mutex *lock);
释放:
void mutex_unlock(struct