pthread_tryjoin_np, pthread_timedjoin_np -
終了したスレッドの join
を 試みる
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <pthread.h>
int pthread_tryjoin_np(pthread_t thread, void **retval);
int pthread_timedjoin_np(pthread_t thread, void **retval,
const struct timespec *abstime);
-pthread
を付けてコンパイルとリンクを行う。
これらの関数は
pthread_join(3)
と同じように動作するが、
このページで説明する違いがある。
pthread_tryjoin_np()
関数は、スレッド
thread
の非停止 (nonblocking) での join
を実行し、スレッドの終了ステータスを
*retval
に入れて返す。
thread
がまだ終了していない場合は、
pthread_join(3) のように停止
(block)
せずに、エラーを返す。
pthread_timedjoin_np()
関数は、タイムアウト付きの
join を行う。
thread
がまだ終了していない場合、
abstime
で指定された最大時間
まで停止する。
thread
が終了する前にタイムアウト時間が経過した場合は、
エラーを返す。
abstime
引き数は以下に示す構造体であり、
Epoch (時刻紀元;
time(2) 参照)
から測った絶対時刻を指定する。
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
返り値¶
成功すると、これらの関数は
0 を返す。
エラーの場合、エラー番号を返す。
エラー¶
これらの関数は
pthread_join(3)
と同じエラーで失敗する。
pthread_tryjoin_np()
はさらに以下のエラーで失敗する場合がある。
- EBUSY
- 呼び出しを行った時点では
thread
はまだ終了していない。
pthread_timedjoin_np()
はさらに以下のエラーで失敗する場合がある。
- ETIMEDOUT
- thread
が終了する前に呼び出しがタイムアウトとなった。
pthread_timedjoin_np() がエラー
EINTR
を返すことはない。
バージョン¶
これらの関数は glibc
バージョン 2.3.3
で初めて登場した。
これらの関数は非標準の
GNU による拡張である。
そのため、名前に
"_np" (nonportable;
移植性がない)
という接尾辞が
付いている。
以下のコードは、最大
5 秒まで join を待つ。
struct timespec ts;
int s;
...
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
/* Handle error */
}
ts.tv_sec += 5;
s = pthread_timedjoin_np(thread, NULL, &ts);
if (s != 0) {
/* Handle error */
}
関連項目¶
clock_gettime(2),
pthread_exit(3),
pthread_join(3),
pthreads(7)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。