標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
POSIX.4a |
両方 | POSIX(ON) |
#define _OPEN_THREADS
#include <pthread.h>
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
const struct timespec *abstime);
#define _UNIX03_THREADS
#include <pthread.h>
int pthread_cond_timedwait(pthread_cond_t * __restrict__cond,
pthread_mutex_t * __retrict__mutex,
const struct timespec * __restrict__abstime);
このようなタイムアウトが起こると、pthread_cond_timedwait() は、mutex (pthread_mutex_init() で作成) によって参照される mutex を再取得します。
正常に実行された場合、pthread_cond_timedwait() は 0 を戻します。
正常に実行されなかった場合、pthread_cond_timedwait() は -1 を戻して、errno を次のいずれかの 値に設定します。
共用条件変数の場合、abstime で指定された時間が経過しました。
Single UNIX Specification、バージョン 3 の特殊な動作: 正常に実行されなかった場合、pthread_cond_timedwait() はエラーを示すエラー番号を戻します。
条件変数が共用 (PTHREAD_PROCESS_SHARED) の場合、mutex も共用でなければな らず、mutex が作成されて初期化されたとき、_OPEN_SYS_MUTEX_EXT フィーチャーが 定義されている必要があります。
条件変数が専用 (PTHREAD_PROCESS_PRIVATE) の場合、mutex も専用でなければ なりません。
条件変数が共用の場合、特定の条件変数用の pthread_cond_wait() また は pthread_cont_timedwait() の呼び出しはすべて、プロセスの存続中、すなわち、 条件変数と mutex の両方が破棄されるまで (pthread_cond-destroy() お よび pthread_mutex_destroy() を使う)、同じ mutex を使用しなければなりません。
⁄* CELEBP21 *⁄
#define _OPEN_THREADS
#include <pthread.h>
#include <stdio.h>
#include <time.h>
#include <errno.h>
main() {
pthread_cond_t cond;
pthread_mutex_t mutex;
time_t T;
struct timespec t;
if (pthread_mutex_init(&mutex, NULL) != 0) {
perror("pthread_mutex_init() error");
exit(1);
}
if (pthread_cond_init(&cond, NULL) != 0) {
perror("pthread_cond_init() error");
exit(2);
}
if (pthread_mutex_lock(&mutex) != 0) {
perror("pthread_mutex_lock() error");
exit(3);
}
time(&T);
t.tv_sec = T + 2;
printf("starting timedwait at %s", ctime(&T));
if (pthread_cond_timedwait(&cond, &mutex, &t) != 0)
if (errno == EAGAIN)
puts("wait timed out");
else {
perror("pthread_cond_timedwait() error");
exit(4);
}
time(&T);
printf("timedwait over at %s", ctime(&T));
}
starting timedwait at Fri Jun 16 10:44:00 2006
wait timed out
timedwait over at Fri Jun 16 10:44:02 2006