スポンサーリンク

PTHREAD_RWLOCK_RDLO... FreeBSD ライブラリ関数マニュアル PTHREAD_RWLOCK_RDLO...

名称

pthread_rwlock_rdlock, pthread_rwlock_tryrdlock − 読取り用の読取り / 書込 みロックの獲得

ライブラリ

Reentrant C Library (libc_r, −pthread)

書式

#include <pthread.h>

int

pthread_rwlock_rdlock(pthread_rwlock_t *lock);

int

pthread_rwlock_tryrdlock(pthread_rwlock_t *lock);

解説

pthread_rwlock_rdlock() 関数は、 lock で与えられた、ロックが現在書込み用 に保持されておらず、書込みスレッドが現在そのロックでブロックされていな い、読取り用のロックを獲得します。読取り用のロックをすぐに獲得できない場 合には、呼び出しているスレッドはそのロックを獲得できるまでブロックしま す。

pthread_rwlock_tryrdlock() 関数は、同じ操作を実行しますが、すぐにロックを 獲得できない (すなわち、ロックが書込み用に保持されている、または待ってい る書込みスレッドがある) 場合には、ブロックしません。

1 つのスレッドは複数の同時の読取り用ロックを保持することができます。その 場合には、個々の獲得されたのために pthread_rwlock_unlock() が 1 度ずつ呼 び出されなければなりません。

呼び出しているスレッドが書込み用のロックを保持している間の、読取り用の ロックの獲得の結果は、未定義です。

実装に関する注

書込み側の飢餓状態を防ぐため、書込み側が読込み側よりも優先されます。

戻り値

問題がない場合は、 pthread_rwlock_rdlock() および pthread_rwlock_tryrdlock() 関数は 0 を返します。問題がある場合は、そのエ ラーを示すためにエラー番号が返されます。

関連項目

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

規格

pthread_rwlock_rdlock() および pthread_rwlock_tryrdlock() 関数は、 Version 2 of the Single UNIX Specification (‘‘SUSv2’’) に適合しているはず です。

エラー

pthread_rwlock_tryrdlock() 関数は、以下の場合に失敗します。

       [EBUSY]

書込みスレッドがロックを保持している、またはブロックさ れているため、ロックを獲得できません。

pthread_rwlock_rdlock() および pthread_rwlock_tryrdlock() 関数は、以下の 場合に失敗することがあります。

[EAGAIN]
lock
に対する読取り用のロックの最大数を既に越えている ため、ロックを獲得できません。

[EDEADLK]
現在のスレッドが既に書込み用の lock を所有しています。

[EINVAL]
lock
によって指定された値が無効です。

[ENOMEM]
ロック (静的に初期化されたロックのみに適用) の初期化の ために十分なメモリがありません。

歴史

pthread_rwlock_rdlock() 関数は、 FreeBSD 3.0 ではじめて登場しました。

FreeBSD 10.0 August 4, 1998 FreeBSD 10.0

スポンサーリンク