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

読み取り/書き込みロックの書き込みロックの獲得

pthread_rwlock_wrlock(3C) は、rwlock が参照する読み取り/書き込みロックに書き込みロックを適用します。

pthread_rwlock_wrlock の構文

#include <pthread.h>

int  pthread_rwlock_wrlock(pthread_rwlock_t *rwlock );

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

書き込み側がいつまでもロックを獲得できない事態を避けるために、書き込みが読み取りに優先するように実装することが許されています。Solaris スレッドの実装では、書き込みが読み取りに優先します。

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

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

pthread_rwlock_wrlock の戻り値

pthread_rwlock_wrlock() は、rwlock が参照する読み取り/書き込みロックオブジェクトに対する書き込みロックが獲得された場合、0 を返します。ロックが獲得されなかった場合は、エラーを示すエラー番号が返されます。