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

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

attr が参照する属性を使用して rwlock が参照する読み取り/書き込みロックを初期化するには、pthread_rwlock_init(3C) を使用します。

pthread_rwlock_init の構文

#include <pthread.h>

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

pthread_rwlock_t  rwlock = PTHREAD_RWLOCK_INITIALIZER;

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

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

pthread_rwlock_init の戻り値

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

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


EINVAL

説明:

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