pthread_rwlock_timedrdlock サブルーチン

目的

読み取りのために読み取り/書き込みロックをロックします。

構文

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

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

説明

pthread_rwlock_timedrdlock () 関数は、 pthread_rwlock_rdlock () 関数のように、 rwlock によって参照される読み取り/書き込みロックに読み取りロックを適用します。 ただし、他のスレッドがロックをアンロックするのを待たずにロックを獲得できない場合、この待機は、指定されたタイムアウトの期限が切れると終了します。 タイムアウトが満了するのは、 abs_timeout によって指定された絶対時間が経過したときです。これは、タイムアウトのベースとなるクロックによって測定されます (つまり、そのクロックの値が abs_timeoutと等しいかそれを超える場合)。または、呼び出し時に abs_timeout によって指定された絶対時間が既に経過している場合です。

Timer オプションがサポートされている場合、タイムアウトは CLOCK_REALTIME クロックに基づきます。 Timers オプションがサポートされていない場合、タイムアウトは time () 関数によって返されるシステム・クロックに基づきます。

タイムアウトの解決は、それが基づいているクロックの解決と一致します。 timespec データ・タイプは、 <time.h> ヘッダーで定義されます。

ロックを即時に獲得できる場合、関数はタイムアウトで失敗することはありません。 ロックを即時に獲得できる場合は、 abs_timeout パラメーターの妥当性を検査する必要はありません。

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

呼び出し時に rwlock に対する書き込みロックを保持している場合、呼び出しスレッドはデッドロックする可能性があります。 この関数が初期化されていない読み取り/書き込みロックで呼び出されると、結果は未定義になります。

アプリケーションの使用量

pthread_rwlock_timedrdlock () 関数は、 スレッド および タイムアウト ・オプションの一部であり、すべてのインプリメンテーションで提供する必要はありません。

戻り値

pthread_rwlock_timedrdlock () 関数は、 rwlock によって参照される読み取り/書き込みロック・オブジェクトの読み取りのロックが獲得されている場合、0 を戻します。 正常に実行されなかった場合、エラーを示すエラー番号を戻します。

エラー・コード

pthread_rwlock_timedrdlock () 関数は、以下の場合に失敗します。

項目 説明
[ETIMEDOUT] 指定されたタイムアウトが満了する前にロックを獲得できませんでした。

pthread_rwlock_timedrdlock () 関数は、以下の場合に失敗することがあります。

項目 説明
[EAGAIN (EAGAIN)] ロックの読み取りロックの最大数を超えることになるため、読み取りロックを獲得できませんでした。
[EDEADLK] (EDEADLK) 呼び出しスレッドは、既に rwlockに対する書き込みロックを保持しています。
[EINVAL] rwlock で指定された値が、初期化された読み取り/書き込みロック・オブジェクトを参照していないか、 abs_timeout ナノ秒値が 0 より小さいか、1000 万以上になっています。

この関数は、エラー・コード [EINTR] を返しません。