マルチスレッドのプログラミング

pthread_rwlock_wrlock(3THR)


#include <pthread.h>

int  pthread_rwlock_wrlock(pthread_rwlock_t *rwlock );

pthread_rwlock_wrlock(3THR) は、rwlock が参照する読み取り / 書き込みロックに書き込みロックを適用します。ほかのスレッド (読み取り側または書き込み側) が rwlock という読み取り / 書き込みロックを保持していない場合、呼び出しスレッドは書き込みロックを獲得します。これ以外の場合、スレッドは、ロックを獲得するまでブロックされます。つまり、pthread_rwlock_wrlock() の呼び出しから戻りません。呼び出し時に、呼び出しスレッドが読み取り / 書き込みロックを保持している場合 (読み取りロックと書き込みロックのどちらでも) の結果は不定です。

書き込み側がいつまでもロックを獲得できない事態を避けるために、書き込みが読み取りに優先するように実装することが許されています。たとえば、Solaris スレッドの実装では、書き込みが読み取りに優先します。「rw_wrlock(3THR) 」を参照してください。

pthread_rwlock_wrlock() が、初期化されていない読み取り / 書き込みロックに対して呼び出された場合、その結果は不定です。

書き込みのための読み取り / 書き込みロックを待っているスレッドにシグナルが送られた場合、スレッドはシグナルハンドラから戻ると、見かけ上割り込みがなかった場合と同様に、書き込みのための読み取り / 書き込みロック待ちを再開します。

戻り値

rwlock が参照する読み取りは / 書き込みロックオブジェクトの書き込みロックが獲得された場合、あり得る戻りの記述が存在しないことを示します。