互斥锁,顾名思义,就是互斥的,独占的,只能有一个进程占有锁,其他进程都得等待锁占有者释放互斥锁,才有可能占有锁。
以下的内容是基于linux-3.11.1(arm)内核代码来讲解内核中mutex的实现。
mutex的定义:
linux-3.11.1/include/linux/mutex.h
其中, count表示空闲资源的数目,初始值为1,表示只有一个资源可用,即只能一个进程可以用。
count: 1 表示可以lock
count: 0 表示锁被某个进程lock了,且没有其他进程来lock
count: -1表示锁被某个进程lock了,且至少有一个进程来lock。
初始化API:mutex_init()
linux-3.11.1/include/linux/mutex.h
linux-3.11.1/kernel/mutex.c
__mutex_init()初始化lock->count为1,初始化lock->ower为NULL。以及初始化等待spin_lock和等待队列wait_list.
上锁API:mutex_lock()
linux-3.11.1/kernel/mutex.c