名 前
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 が 終 了 す る 前 に 呼 び 出 し が タ イ ム ア ウ ト と な っ た 。
EINVAL |
abstime の 値 が 無 効 で あ る (tv_sec が 0 よ り 小 さ い か 、 tv_nsec 1e9 が よ り 大 き い )。 |
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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。