名称
pthread_rwlock_unlock() ― 読み書きロックの解除
構文
#include <pthread.h>
int pthread_rwlock_unlock(
pthread_rwlock_t *rwlock
);
パラメータ
| rwlock | | ロックを解除する読み書きロックへのポインタ。 |
説明
関数 pthread_rwlock_unlock() は、 rwlock で参照される読み書きロックを解放するため、所有者から呼び出されます。
読み書きロック rwlock が呼び出し元のスレッドにより保たれていない場合、結果は不定です。
読み書きロック rwlock の読み取りロックを解放するためにこの関数を呼び出し、読み書きロックに他の読み取りロックが存在する場合、読み書きロック上の読み取りロックは、現在のスレッドが所有者になっているもの以外は残ったままとなります。
この読み書きロックの最後の読み取りロックが解放されると、このロックは所有者のない、ロックが解除された状態になります。
この関数が読み書きロック rwlock の書き込みロックを解放するため呼び出されると、このロックは所有者のない、ロックが解除された状態になります。
pthread_rwlock_unlock() 関数を呼び出して読み書きロック rwlock に所有者がなくなり、読み書きロックに対する書き込みロックの取得で待機しているスレッドが存在する場合、スケジューリング方針を使って、読み書きロックに書き込みロックが取得できるスレッドを決定します。
読み書きロックに対する読み取りロックの取得で待機しているスレッドが存在する場合、スケジューリング方針を使って、読み書きロックに読み取りロックが取得できるスレッドを決定します。
読み取りロックや書き込みロックで rwlock にブロックされているスレッドが複数個あった場合、ロックの取得の順序には特に規定はありません。
この関数が初期化されていない読み書きロックで呼び出される場合、結果は不定です。
戻り値
正常終了すると pthread_rwlock_unlock() は 0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の条件の場合、 pthread_rwlock_unlock() 関数は、該当するエラー番号を返します。
| [EINVAL] | | rwlock で指定された値が、初期化された読み書きロックにオブジェクトを引用しない場合。 |
| [EPERM] | | 現在のスレッドが、読み書きロックを所有していない場合。 |
著者
pthread_rwlock_unlock() は、X/Open で開発されました。
標準準拠
pthread_rwlock_unlock(): X/Open.