Silphireの日記: pthread日記(36) - pthread_mutex_lock()
Mutexをロックします。
int pthread_mutex_lock(pthread_mutex_t *mutex);
ポインタmutexが参照しているMutexをロックします。既に対象のMutexがロックされていた場合は、ロックしているスレッドがMutexを解放するまで、ロックをかけたスレッドがブロックされます。
MutexのタイプがPTHREAD_MUTEX_NORMALの時、デッドロックの検出は行われません。ロック済みのMutexに対して再度ロックをかけると、デッドロックを引き起こします。ロックされていないMutexや、既にロックが解除されたMutexに対してロックの解除を行った時の動作は未定義です。
MutexのタイプがPTHREAD_MUTEX_ERRORCHECKの時、エラーチェックが行われます。ロック済みのMutexに対して再度ロックをかけようとした時エラーになります。ロックされていないMutexや、既にロックが解除されたMutexに対してロックの解除を行った時もエラーになります。
MutexのタイプがPTHREAD_MUTEX_RECURSIVEの時、Mutexはロックカウントを持ちます。スレッドがMutexのロックに最初に成功した時、ロックカウントは1になります。以降Mutexをロックするたびにロックカウントは1ずつ増え、ロックが解除されるたびにロックカウントは1ずつ減ります。ロックカウントが0になった時、Mutexは他のスレッドに対して解放されます。ロックされていないMutexや、既にロックが解除されたMutexに対してロックの解除を行った時はエラーになります。
MutexのタイプがPTHREAD_MUTEX_DEFAULTの時、再帰的にMutexをロックした時の動作は未定義です。ロックされていないMutexや、既にロックが解除されたMutexに対してロックの解除を行った時の動作は未定義です。
pthread_mutex_lock()が成功した時には0を返します。エラーの時はエラーに応じた値を返します。
pthread日記(36) - pthread_mutex_lock() More ログイン