pthread_rwlock_rdlock() - 読み取りまたは書き込みロック・オブジェクトのロックの待機

標準

標準/拡張機能 C/C++ 依存項目

z/OS UNIX
Single UNIX Specification、バージョン 3

両方

POSIX(ON)
OS/390 V2R7

形式

#define _OPEN_THREADS
#include <pthread.h>

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
SUSV3:
#define _UNIX03_THREADS
#include <pthread.h>

int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);

機能説明

pthread_rwlock_rdlock() 関数は、rwlock で参照される 読み取りまたは書き込みロックに読み取りロックを適用します。書き込み機能がロックを保持しておらず、ロックにブロックされている書き込み機能がない場合は、呼び出しスレッドは読み取りロックを取得します。z/OS®UNIX では、書き込み機能によるロックが保持されておらず、さらにロックを待機している書き込み機能がある場合、スレッドがあらかじめ読み取りの rwlock を保持していない限り、呼び出しスレッドはロックを取得しません。読み取りまたは書き込みロックを保持または待機している書き込み機能がなくなるまで、スレッドはブロックされ、待機します。書き込み機能がロックを保持している場合、呼び出しスレッドは読み取りロックを取得しません。読み取りロックが取得されないと、呼び出しスレッドはロックを取得できるようになるまで ブロックされます (つまり、pthread_rwlock_rdlock() 呼び出しから戻りません)。

スレッドは rwlock で複数の並行読み取りロックを 保持することがあります (つまり、pthread_rwlock_rdlock() 関数を n 回、正常に呼び出すことがあります)。その場合、スレッドは、対応するアンロックを実行する必要があります (つまり、pthread_rwlock_unlock() 関数を n 回呼び出す必要があります)。読み取り/書き込みロックは、共用リソースを保護する場合に使用されます。

注: スレッドが終了時にロックを所有している場合は、z/OSUNIX により、それらのロックが解放されます。

戻り値

正常に実行された場合、pthread_rwlock_rdlock() は 0 を戻します。

正常に実行されなかった場合、pthread_rwlock_rdlock() は -1 を戻して、errno を次のいずれかの 値に設定します。
エラー・コード
説明
EAGAIN
rwlock の読み取りロックの最大数を超えたため、読み取りロックを取得できませんでした。この errno は共用パスでのみ発生します。
EDEADLK
現行スレッドは既に読み取りまたは書き込みロックを書き込み用に 所有しています。
EINVAL
rwlock によって指定された値は無効です。
ENOMEM
ロックを取得するにはメモリーが不十分です。この errno は 専用パスでのみ発生します。

Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_rwlock_rdlock() はエラーを示すエラー番号を戻します。

関連情報