PTHREAD_RWLOCK_WRLOCK(3)

名称
pthread_rwlock_wrlock, pthread_rwlock_trywrlock - 書込み用の読取り/書込みロックの獲得

ライブラリ
libc_r

書式
#include <pthread.h> int pthread_rwlock_wrlock(pthread_rwlock_t *lock) int pthread_rwlock_trywrlock(pthread_rwlock_t *lock)

解説
pthread_rwlock_wrlock() 関数は、 lock に対して書込み用のロックを獲得できるまで、ブロックします。 pthread_rwlock_trywrlock() 関数は、同じ操作を実行しますが、すぐにロックを獲得できない場合には、 ブロックしません。

呼び出しているスレッドが、呼び出しが行なわれたのと同時に既にそのロックを 保持している場合には、その結果は未定義です。

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

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

関連項目
pthread_rwlock_trywrlock(3), pthread_rwlock_unlock(3), pthread_rwlock_wrlock(3)

規格
pthread_rwlock_wrlock() および pthread_rwlock_trywrlock() 関数は、 susv2 に適合しているはずです。

エラー
pthread_rwlock_trywrlock() 関数は、以下の場合に失敗します。

[EBUSY]
    呼び出しているスレッドがブロック無しでロックを獲得できません。

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

[EDEADLK]
    呼び出しているスレッドが既にその読取り/書込みロックを (読取り用または 書込み用に) 所有しています。

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

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

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