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

pthread_rwlock_unlock の構文

#include <pthread.h>

int pthread_rwlock_unlock (pthread_rwlock_t  *rwlock);

呼び出しスレッドが rwlock という読み取り/書き込みロック を保持していない場合、その結果は不定です。

pthread_rwlock_unlock() を呼び出して読み取り/書き込みロックオブジェクトから読み取りオブジェクトを解放しても、このロックオブジェクトにほかの読み取りロックが保持されている場合、このロックオブジェクトは読み取りにロックされたままになります。pthread_rwlock_unlock() が、呼び出しスレッドによる最後の読み取りロックを解放すると、呼び出しスレッドはこのオブジェクトの所有者でなくなります。pthread_rwlock_unlock() がこの読み取り/書き込みロックオブジェクトの最後の読み取りロックを解放すると、読み取り/書き込みロックオブジェクトはロックが解除され、所有者のない状態になります。

pthread_rwlock_unlock() を呼び出し、読み取り/書き込みロックオブジェクトから書き込みオブジェクトを解放すると、このロックオブジェクトはロックが解除され、所有者のない状態になります。

pthread_rwlock_unlock() を呼び出した結果として読み取り/書き込みロックオブジェクトがロック解除されたときに、複数のスレッドが書き込みのための読み取り/書き込みロックオブジェクトの獲得を待っている場合は、スケジューリングポリシーを使用して、書き込みのための読み取り/書き込みロックオブジェクトを獲得するスレッドが決定されます。複数のスレッドが読み取りのための読み取り/書き込みロックオブジェクトの獲得を待っている場合も、スケジューリングポリシーを使用して、読み取りのための読み取り/書き込みロックオブジェクトを獲得するスレッドの順番が決定されます。複数のスレッドが読み取りロックと書き込みロック両方のために rwlock にブロックされている場合は、読み取り側と書き込み側のどちらが先にロックを獲得するのかは規定されていません。

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