名称
pthread_rwlock_wrlock(), pthread_rwlock_trywrlock() ― 読み書きロックへの書き込みロックまたはロックの試行
構文
#include <pthread.h>
int pthread_rwlock_wrlock(
pthread_rwlock_t *rwlock
);
int pthread_rwlock_trywrlock(
pthread_rwlock_t *rwlock
);
パラメータ
| rwlock | | 書き込みでロックする読み書きロックへのポインター。 |
説明
pthread_rwlock_wrlock() 関数は、 rwlock で参照される読み書きロックオブジェクトに書き込みロックを適用します。
他のスレッド (読み取りプロセスまたは書き込みプロセス) がどれも読み書きロック rwlock を保持していない場合、呼び出しスレッドが書き込みロックを取得します。
それ以外の場合、スレッドはロックが取得できるようになるまでブロックします
(つまり、 pthread_rwlock_wrlock() 呼び出しから戻りません)。
呼び出しスレッドが現在 rwlock の読み書きロック (読み取りロックでも書き込みロックでも)
を所有している場合、結果は不定です。
関数 pthread_rwlock_trywrlock() は、何らかのスレッドが現在 rwlock (読み取りまたは書き込み) を保持している場合に実行が失敗する点を除いて、 pthread_rwlock_wrlock() 関数と同じように書き込みロックを処理します。
これらの関数のどちらも、初期化されていない読み書きロックで呼び出した場合、結果は不定です。
シグナルが、シグナルハンドラーから戻った後で、読み書きロックを待っているスレッドに送信される場合、スレッドは、中断がなかったかのように読み書きロックの待機を再開します。
戻り値
正常終了すると pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() は 0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の現象が発生した場合、 pthread_rwlock_trywrlock() 関数は、該当するエラー番号を返します。
| [EBUSY] | | 読み取りまたは書き込みですでにロックされているため、書き込みで読み書きロック rwlock を取得することができなかった場合。 |
以下の条件の場合、 pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() 関数は、該当するエラー番号を返します。
| [EINVAL] | | rwlock で指定された値が、初期化済みの読み書きロックを参照していない場合。 |
| [EDEADLK] | | 現在のスレッドが、読み取りまたは書き込みの読み書きロックをすでに所有している場合。 |
著者
pthread_rwlock_wrlock() と pthread_rwlock_trywrlock() は、X/Open が開発しました。
標準準拠
pthread_rwlock_wrlock(): X/Open.
pthread_rwlock_trywrlock(): X/Open.