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

pthread_rwlock_timedrdlock の構文

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

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

ほかのスレッドによるロック解除を待たなければロックを獲得できない場合、この待機は、指定されたタイムアウトの期限が切れると終了します。タイムアウトの期限が切れるのは、abs_timeout で指定された絶対時間 (CLOCK_REALTIME クロックで測定される) が経過した場合 (つまり、そのクロックの値が abs_timeout に等しくなるか、超えた場合)、または呼び出し時に abs_timeout で指定された絶対時間がすでに過ぎている場合です。

タイムアウトの解像度は、CLOCK_REALTIME クロックの解像度です。timespec データ型は、<time.h> ヘッダーで定義されています。ロックをただちに獲得できる場合は、この関数がタイムアウトで失敗することはありません。ロックをただちに獲得できた場合は、タイムアウトパラメータの妥当性を検査する必要はありません。

pthread_rwlock_timedrdlock() の呼び出しによって読み取り/書き込みロックでブロックされているスレッドに、シグナルハンドラを実行させるシグナルが送信された場合、このスレッドはシグナルハンドラから復帰すると、中断がなかったかのようにロックの待機を再開します。

呼び出しスレッドは、呼び出し時に rwlock に書き込みロックを保持しているとデッドロックに陥る可能性があります。

pthread_rwlock_reltimedrdlock_np() 関数は、タイムアウトが相対時間間隔として指定される点を除いて、pthread_rwlock_timedrdlock() 関数と同じ動作をします。