EN JA
SEM_TIMEDWAIT(3)
SEM_TIMEDWAIT(3) FreeBSD Library Functions Manual SEM_TIMEDWAIT(3)

名称

sem_timedwaitセマフォをロックする

ライブラリ

POSIX Threads Library (libpthread, -lpthread)

書式

#include < semaphore.h>

int
sem_timedwait( sem_t *sem, const struct timespec *abs_timeout);

解説

sem_timedwait() 関数は、 sem_wait(3) 関数などで sem によって参照されるセマフォをロックします。しかしながら、 sem_post(3) 関数を実行することによってセマフォをアンロックするために別のプロセスまたはスレッドをウェートせずにセマフォをロックすることができないなら、指定されたタイムアウトの期限が切れるとき、このウェートは、終了されます。

どのタイムアウトが基づいている (すなわち、その時計の値が、 abs_timeout に等しい、または超えているとき) クロックによって測定されるか、または abs_timeout によって指定された絶対時間が呼び出し時点で既に経過していたなら、 abs_timeout によって指定された絶対時間が経過するとき、タイムアウトは、期限が切れます。

タイムアウトは、 CLOCK_REALTIME クロックに基づいていることに注意してください。

直ちにセマフォをロックすることができるなら、 abs_timeout の正当性は、チェックされません。

戻り値

呼び出しプロセスが sem によって指定されたセマフォのセマフォロック操作の実行に成功したなら、 sem_timedwait() 関数は、0 を返します。呼び出しが成功しなかったなら、セマフォの状態は、変更されず、関数は、-1 の値を返し、グローバル変数 errno に誤りを示す値が設定されます。

エラー

sem_timedwait() 関数は、次の場合に失敗します:
[ EINVAL]
sem 引数が、有効なセマフォを参照していないか、または、プロセスまたはスレッドがブロックされ、 abs_timeout パラメータが、nanoseconds フィールド値に 0 未満、または 10 億以上を指定しました。
[ ETIMEDOUT]
セマフォは、指定されたタイムアウトの期限が切れる前に、ロックできませんでした。
[ EINTR]
シグナルが、この関数で割り込まれました。

規格

sem_timedwait() 関数は、 IEEE Std 1003.1-2004 (“POSIX.1”) に適合しています。

歴史

この関数は FreeBSD 5.0 ではじめて登場しました。
March 3, 2008 FreeBSD