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

指定した絶対時間までの読み取り/書き込みロックの書き込みロックの獲得

pthread_rwlock_timedwrlock(3C) 関数は、pthread_rwlock_wrlock () 関数と同様に、rwlock が参照する読み取り/書き込みロックに書き込みロックを適用しますが、指定された絶対時間までしかロックを適用しようとしません。

pthread_rwlock_timedwrlock の構文

#include <pthread.h>
#include <time.h>

int  pthread_rwlock_timedwrlock(pthread_rwlock_t   *restrict rwlock, 
     const struct timespec *restrict abs_timeout);

呼び出しスレッドは、ほかの読み取りスレッドまたは書き込みスレッドが rwlock という読み取り/書き込みロックを保持していない場合、書き込みロックを獲得します。ほかのスレッドによるロック解除を待たなければロックを獲得できない場合、この待機は、指定されたタイムアウトの期限が切れると終了します。タイムアウトの期限が切れるのは、abs_timeout で指定された絶対時間 (CLOCK_REALTIME クロックで測定される) が経過した場合 (つまり、そのクロックの値が abs_timeout に等しくなるか、超えた場合)、または呼び出し時に abs_timeout で指定された絶対時間がすでに過ぎている場合です。pthread_rwlock_reltimedwrlock_np() 関数は、タイムアウトが相対時間間隔として指定される点を除いて、pthread_rwlock_timedwrlock() 関数と同じ動作をします。

pthread_rwlock_timedwrlock の戻り値

正常に終了して、rwlock が参照する読み取り/書き込みロックオブジェクトに対する書き込みロックが獲得された場合、0 を返します。それ以外の戻り値は、エラーが発生したことを示します。


ETIMEDOUT

説明:

指定されたタイムアウトの期限が切れる前にロックを獲得できませんでした。


EDEADLK

説明:

呼び出しスレッドは、rwlock をすでに保持しています。


EINVAL

説明:

rwlock で指定された値が初期化された読み取り/書き込みロックオブジェクトを表していないか、タイムアウトのナノ秒の値が 0 未満または 10 億以上です。