PTHREAD_RWLOCK_TIMEDRDLOCK(3) | FreeBSD Library Functions Manual | PTHREAD_RWLOCK_TIMEDRDLOCK(3) |
名称
pthread_rwlock_timedrdlock — 読み込み用の読み込み書き込みロックを獲得するか指定された期間の後にあきらめるライブラリ
POSIX Threads Library (libpthread, -lpthread)書式
#include < pthread.h> int
pthread_rwlock_timedrdlock( pthread_rwlock_t *rwlock, const struct timespec *abs_timeout);
解説
この関数は、読み込み書き込みロック rwlock で読み込み用のロックを獲得します。しかしながら、別のスレッドがロックを解除するために待つことなしにロックが獲得できないならば、 abs_timeout が時間切れで終了まで待機します。スレッドは、同時に複数の読み込み用ロックを保持できます。 pthread_rwlock_unlock(3) 関数は、ロックを獲得する毎に 1 度呼び出さなければなりません。
スレッドがシグナルによって割り込まれると、スレッドがシグナルハンドラから戻った後に pthread_rwlock_timedrdlock() 関数は、自動的に再開されます。
呼び出しスレッドは、呼び出し時に作成され rwlock で書き込み用ロックが保持される場合、デッドロックが起こるかもしれません。この関数が初期化されていない読み込み書き込みロックで呼び出されたなら、結果は、未定義です。
実装に関する注
書み込み側の飢餓状態を防ぐため、書み込み側が読み込み側よりも優先されます。戻り値
成功したなら、 pthread_rwlock_timedrdlock() 関数は、0 を返します。その他の場合は、エラーを示す番号が返されます。この関数は、 EINTR のエラーコードを返すことはありません。
エラー
pthread_rwlock_timedrdlock() 関数は、次の場合に失敗します:- [ ETIMEDOUT]
- 指定された制限時間内にロックを獲得できませんでした。
pthread_rwlock_timedrdlock() 関数は、次の場合に失敗します:
- [ EAGAIN]
- 読み込み用ロックが、 rwlock のための読み込み用ロックの最大数を上回ったために、獲得できませんでした。
- [ EDEADLK]
- 呼び出しスレッドが、既に rwlock で書き込み用ロックを保持しています。
- [ EINVAL]
- rwlock によって指定された値が、初期化された読み込み書き込みロックオブジェクトを参照していないか、 abs_timeout ナノ秒の値は、0 より小さいか 10 億以上です。
規格
pthread_rwlock_timedrdlock() 関数は、 ISO/IEC 9945-1:1996 (“POSIX.1”) に適合する予定です。歴史
pthread_rwlock_timedrdlock() 関数は、 FreeBSD 5.2 ではじめて登場しました。January 16, 2004 | FreeBSD |