pthread_rwlock_tryrdlock() - 読み取りまたは書き込みロック・オブジェクトを読み取り用にロックする試み

標準

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

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

両方

POSIX(ON)
OS/390 V2R7

形式

#define _OPEN_THREADS
#include <pthread.h>

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

int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);

機能説明

pthread_rwlock_tryrdlock() 関数は、pthread_rwlock_rdlock() 関数と同様に読み取りロックを適用します。ただし、スレッドが rwlock に書き込みロックを 保持していたり、書き込み機能が rwlock でブロックされて いる場合、スレッドがあらかじめ rwlock を読み取り用に 保持していない限り、失敗します。読み取り/書き込みロックは、共用リソースを保護する場合に使用されます。

rwlock で識別される読み取りまたは書き込みロックが ロックされている場合、pthread_rwlock_tryrdlock() は即時に戻ります。

読み取りまたは書き込みロックに読み取りロックだけがあると、pthread_rwlock_tryrdlock() は、mutex を解放するために pthread_rwlock_unlock() がスレッドによって呼び出される必要がある 回数のカウントに追加されます (つまり、この関数は pthread_rwlock_rdlock() 関数と同じ動作をとります)。

戻り値

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

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

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

関連情報