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

読み取り / 書き込みロックの初期化

pthread_rwlock_init(3T)


#include <pthread.h>

int pthread_rwlock_init(pthread_rwlock_t *rwlock, const pthread_rwlockattr_t *attr);

pthread_rwlock_t  rwlock = PTHREAD_RWLOCK_INITIALIZER;

pthread_rwlock_init(3T) により、attr を参照される属性を使用して、rwlock が参照する読み取り / 書き込みロックを初期化します。attrNULL の場合、デフォルトの読み取り / 書き込みロック属性が使われます。この場合の結果は、デフォルトの読み取り / 書き込みロック属性オブジェクトのアドレスを渡す場合と同じです。いったん初期化したロックは、繰り返して使用するために再び初期化する必要はありません。初期化が成功すると、読み取り / 書き込みロックは初期化され、ロックが解除された状態になります。初期化済みの読み取り / 書き込みロックを指定して、pthread_rwlock_init() を呼び出した場合、その結果は不定です。最初に初期化しないで読み取り / 書き込みロックを使用した場合も、その結果は不定です。Solaris スレッドについては、「rwlock_init(3T)」を参照してください。

デフォルトの読み取り / 書き込みロック属性を使用するのであれば、PTHREAD_RWLOCK_INITIALIZER というマクロを使用して、静的に割り当てられている読み取り / 書き込みロックを初期化できます。この場合の結果は、パラメータ attrNULL を指定して pthread_rwlock_init() を呼び出し、動的に初期化したときと同じです。ただし、エラーチェックが実行されません。

戻り値

正常終了時は 0 です。それ以外の戻り値は、エラーが発生したことを示します。

pthread_rwlock_init() が正常に終了しなかった場合、rwlock は初期化されず、rwlock の内容は未定義です。


EINVAL

attr または rwlock が示す値は無効です。