本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > p

pthread_mutex_lock(3T)

pthread ライブラリ
HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

pthread_mutex_lock(), pthread_mutex_trylock() ― mutex のロックまたはロックの試行

構文

#include <pthread.h> 
 
int pthread_mutex_lock( 
   pthread_mutex_t *mutex 
); 
 
int pthread_mutex_trylock( 
   pthread_mutex_t *mutex 
); 

パラメータ

mutex  

ロックする mutex へのポインター。

説明

pthread_mutex_lock() 関数は、mutex オブジェクトの mutex をロックします。 呼び出しスレッドが mutex を取得する方法は、mutex の type 属性で異なります。 この操作は、 mutex で示される mutex オブジェクトをロック状態にし、その所有者を呼び出しスレッドにして戻ります。

mutex の type 属性が PTHREAD_MUTEX_NORMAL の場合、デッドロックの検出は行われません。 mutex を再度ロックしようとすると、デッドロックが発生します。 スレッドが、自分でロックしていない mutex やロック解除されている mutex のロックを解除しようとすると、結果は不定になります。

mutex の type 属性が PTHREAD_MUTEX_ERRORCHECK の場合、mutex の所有者情報は保持されます。 スレッドが、すでにロック済みの mutex を再度ロックしようとすると、エラーが返されます。 スレッドが、自分でロックしていない mutex やロック解除されている mutex のロックを解除しようとすると、エラーが返されます。

mutex の type 属性が PTHREAD_MUTEX_RECURSIVE の場合、mutex の所有者情報とロックカウントが保持されます。 スレッドが最初に mutex の取得に成功すると、count フィールドに 1 が設定されます。 スレッドがこの mutex をロックするたびに、count フィールドは 1 ずつ増やされます。 スレッドが mutex のロックを解除するたびに、count フィールドは 1 ずつ減らされます。 count フィールドが 0 に達すると、mutex は、他のスレッドから取得できるようになります。 スレッドが、自分でロックしていない mutex をロック解除しようとすると、エラーが返されます。

mutex の type 属性が PTHREAD_MUTEX_NO_OWNER_NP の場合、デッドロックの検出は行われません。 mutex を再度ロックしようとすると、デッドロックになります。 スレッドは、自分でロックしていない mutex をロック解除することができます。 ロック解除されている mutex のロックを解除しようとすると、結果は不定になります。

mutex の type 属性が PTHREAD_MUTEX_DEFAULT の場合、mutex を再帰的にロックしようとすると、結果は不定になります。 スレッドが、自分でロックしていない mutex をロック解除しようとすると、結果は不定です。 ロックされていない mutex のロックを解除しようとすると、結果は不定です。

関数 pthread_mutex_trylock() は、最初の試みで mutex で示される mutex オブジェクトを取得することができない場合には、呼び出しがエラーで即座に戻るという点を除いては、 pthread_mutex_lock() 関数とまったく同じです。

mutex を待っているスレッドにシグナルが配信された場合、シグナルハンドラーから戻ると、スレッドは中断がなかったかのように mutex 待機を再開します。

戻り値

正常終了すると pthread_mutex_lock()pthread_mutex_trylock() は 0 を返します。 それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。

エラー

以下の現象が発生した場合、 pthread_mutex_lock()pthread_mutex_trylock() 関数は、該当するエラー番号を返します。

[EINVAL] 

mutexPTHREAD_PRIO_PROTECT の mutex であり、呼び出し元の優先順位が、 mutex の最高優先順位より高い場合。

以下の現象が発生した場合、 pthread_mutex_trylock() 関数は、該当するエラー番号を返します。

[EBUSY] 

mutex が、別のスレッドによって現在ロックされている場合。

以下の現象が発生した場合、 pthread_mutex_lock()pthread_mutex_trylock() 関数は、該当するエラー番号を返します。

[EAGAIN] 

mutex の再帰的ロックの最大値を超えたので、 mutex が取得できなかった場合。 このエラーは、HP-UX では検出されません。

[EINVAL] 

mutex が、初期化された mutex ではない場合。

[EFAULT] 

mutex パラメータが、無効なアドレスを指している場合。

以下のいずれかのエラーが発生した場合、 pthread_mutex_lock() 関数は該当するエラー番号を返します。

[EDEADLK]  

現在のスレッドが、mutex をすでに所有している場合。 このエラーは、HP-UX では PTHREAD_MUTEX_ERRORCHECK の mutex でのみ発生します。

警告

再帰的な mutex は、スレッドをデッドロックさせることなく、同じスレッドによって一度以上ロックさせられます。 再帰的な mutex の所有者が mutex をロックしようと試みる回数があまりにも多くなると、結果が不定になる可能性があります。

著者

pthread_mutex_lock()pthread_mutex_trylock() は、IEEE POSIX P1003.1c 規格と X/Open から派生しました。

参照

pthread_mutex_init(3T), pthread_mutex_destroy(3T), pthread_mutex_unlock(3T)

標準準拠

pthread_mutex_lock(): POSIX 1003.1c.
pthread_mutex_trylock(): POSIX 1003.1c.

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.