*参照元 [#e960ad50]
#backlinks

*説明 [#j5806e48]
-パス: 複数あり
--CONFIG_DEBUG_LOCK_ALLOC 有効: [[linux-2.6.33/include/linux/mutex.h]]
--CONFIG_DEBUG_LOCK_ALLOC 無効: [[linux-2.6.33/kernel/mutex.c]]

-FIXME: これは何?
--説明


**引数 [#sf5da1d0]
-struct mutex *lock
--
--[[linux-2.6.33/mutex]]


**返り値 [#lae8a7c2]
-なし


**参考 [#yc2d0fc4]


*実装 [#uf432457]
**include/linux/mutex.h [#q37b1f0c]
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 
-
--[[linux-2.6.33/CONFIG_DEBUG_LOCK_ALLOC]]

 #define mutex_lock(lock) mutex_lock_nested(lock, 0)
 
 (略)
 
-
--[[linux-2.6.33/mutex_lock_nested()]]

 #else

-

 extern void mutex_lock(struct mutex *lock);
 
 (略)
 
-

 #endif




**kernel/mutex.c [#s707b57f]
 /***
  * 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();
-
--[[linux-2.6.33/might_sleep()]]

 	/*
 	 * The locking fastpath is the 1->0 transition from
 	 * 'unlocked' into 'locked' state.
 	 */
 	__mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath);
-高速にロックカウントを減らす。
-高速にロックカウントを減らして、ミューテックスをロック状態にする。
--[[linux-2.6.33/__mutex_fastpath_lock()]]
-既にロックされていたら __mutex_lock_slowpath でロックする。
-既にロックされていたら __mutex_lock_slowpath でロック状態にする。
--[[linux-2.6.33/__mutex_lock_slowpath()]]

 	mutex_set_owner(lock);
-現在実行中のタスクをミューテックスの所有者に設定する。
--[[linux-2.6.33/mutex_set_owner()]]

 }
 
 EXPORT_SYMBOL(mutex_lock);
-特にライセンスの区別なくシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]

*コメント [#u5b0e2fb]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS