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

pthread_rwlock_rdlock(3T)

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

テクニカル ドキュメント

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

 ≫ 目次

 ≫ 索引

名称

pthread_rwlock_rdlock(), pthread_rwlock_tryrdlock() ― 読み書きロックへの読み取りロックまたはロックの試行

構文

#include <pthread.h> 
 
int pthread_rwlock_rdlock( 
   pthread_rwlock_t *rwlock 
); 
 
int pthread_rwlock_tryrdlock( 
   pthread_rwlock_t *rwlock 
); 

パラメータ

rwlock  

読み取りでロックする読み書きロックへのポインター。

説明

pthread_rwlock_rdlock() 関数は、 rwlock で参照される読み書きロックオブジェクトに読み取りロックを適用します。 書き込みプロセスがロックをもたず、ロックでブロックされている書き込みプロセスがない場合、呼び出しスレッドが読み取りロックを取得します。 書き込みプロセスがロックをもたず、ロックを待っている書き込みプロセスがある場合、呼び出しスレッドがロックを取得するかどうかは規定されません。 書き込みプロセスがロックをもっている場合、呼び出しスレッドは読み取りロックを取得できません。 読み取りロックが取得されない場合、呼び出しスレッドは、ロックを取得できるようになるまでブロックします (つまり、 pthread_rwlock_rdlock() 呼び出しから戻りません)。 呼び出しスレッドが現在 rwlock の書き込みロックを所有している場合、結果は不定です。

書き込みプロセス不足を回避するため、読み取りプロセスで書き込みプロセスをサポートする実装方式もあります。

スレッドは、 rwlock に複数の同時ロックを持つことができます (つまり、 pthread_rwlock_rdlock() 関数が正常に n 回呼び出せます)。 その場合、スレッドは、対応する分のロック解除を実行しなければなりません (つまり、 pthread_rwlock_unlock() 関数を n 回呼び出さなければなりません)。

関数 pthread_rwlock_tryrdlock() は、 rwlock に書き込みロックをもっているスレッドがある場合や、 rwlock でブロックされている書き込みプロセスがある場合に実行が失敗することを除いて、 pthread_rwlock_rdlock() 関数と同じように読み取りロックを処理します。

これらの関数のどちらも、初期化されていない読み書きロックで呼び出した場合、結果は不定です。

シグナルが、シグナルハンドラーから戻った後で、読み書きロックを待っているスレッドに送信される場合、スレッドは、中断がなかったかのように読み書きロックの待機を再開します。

戻り値

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

エラー

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

[EBUSY] 

書き込みプロセスがロックをもっているか、読み書きロック rwlock でブロックされているので、rwlock の読み取りロックを取得することができなかった場合。

以下の条件の場合、 pthread_rwlock_rdlock()pthread_rwlock_tryrdlock() 関数は、該当するエラー番号を返します。

[EINVAL] 

rwlock で指定された値が、初期化済みの読み書きロックを参照していない場合。

[EDEADLK]  

現在のスレッドがすでに、書き込みで読み書きロックを所有している場合。

[EAGAIN] 

rwlock が読み取りロックの最大値を超えているので、読み取りロックを取得できなかった場合。 このエラーは、HP-UX では検出されません。

著者

pthread_rwlock_rdlock()pthread_rwlock_rdlock() は、X/Open が開発しました。

参照

pthread_rwlock_init(3T), pthread_rwlock_destroy(3T), pthread_rwlock_trywrlock(3T), pthread_rwlock_wrlock(3T), pthread_rwlock_unlock(3T)

標準準拠

pthread_rwlock_rdlock(): X/Open.
pthread_rwlock_tryrdlock(): X/Open.

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