参照元†
返り値†
include/linux/mutex.h†
#ifdef CONFIG_DEBUG_LOCK_ALLOC
#define mutex_lock(lock) mutex_lock_nested(lock, 0)
(略)
#else
extern void mutex_lock(struct mutex *lock);
(略)
#endif
kernel/mutex.c†
/***
* mutex_lock - acquire the mutex
* @lock: the mutex to be acquired
*
* Lock the mutex exclusively for this task. If the mutex is not
* available right now, it will sleep until it can get it.
*
* The mutex must later on be released by the same task that
* acquired it. Recursive locking is not allowed. The task
* may not exit without first unlocking the mutex. Also, kernel
* memory where the mutex resides mutex must not be freed with
* the mutex still locked. The mutex must first be initialized
* (or statically defined) before it can be locked. memset()-ing
* the mutex to 0 is not allowed.
*
* ( The CONFIG_DEBUG_MUTEXES .config option turns on debugging
* checks that will enforce the restrictions and will also do
* deadlock debugging. )
*
* This function is similar to (but not equivalent to) down().
*/
void __sched mutex_lock(struct mutex *lock)
{
might_sleep();
/*
* The locking fastpath is the 1->0 transition from
* 'unlocked' into 'locked' state.
*/
__mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath);
- 高速にロックカウントを減らす。
- 既にロックされていたら __mutex_lock_slowpath でロックする。
mutex_set_owner(lock);
- 現在実行中のタスクをミューテックスの所有者に設定する。
}
EXPORT_SYMBOL(mutex_lock);
コメント†