パスワードを忘れた? アカウント作成
451988 journal

Silphireの日記: pthread日記(36) - pthread_mutex_lock()

日記 by Silphire

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を返します。エラーの時はエラーに応じた値を返します。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...