pthread_tryjoin_np(3) - wariua/manpages-ko GitHub Wiki
pthread_tryjoin_np, pthread_timedjoin_np - μ’ λ£ν μ€λ λμ ν©λ₯ μλνκΈ°
#define _GNU_SOURCE /* 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μ λ
ΌλΈλ‘νΉ ν©λ₯λ₯Ό μννμ¬ κ·Έ μ€λ λμ μ’
λ£ μνλ₯Ό *retvalμ λ°ννλ€. threadκ° μμ§ μ’
λ£νμ§ μμμΌλ©΄ pthread_join(3)μ²λΌ λΈλ‘ νμ§ μκ³ νΈμΆμ΄ μ€λ₯λ₯Ό λ°ννλ€.
pthread_timedjoin_np() ν¨μλ νμμμ μλ ν©λ₯λ₯Ό μννλ€. threadκ° μμ§ μ’
λ£νμ§ μμμΌλ©΄ abstimeμ μ§μ ν μ΅λ μκ°κΉμ§ νΈμΆμ΄ λΈλ‘ νλ€. threadκ° μ’
λ£νκΈ° μ μ νμμμμ΄ λ§λ£νλ©΄ νΈμΆμ΄ μ€λ₯λ₯Ό λ°ννλ€. abstime μΈμλ λ€μ ννμ ꡬ쑰체μ΄λ©° μν¬ν¬ κΈ°μ€μΌλ‘ μΈ‘μ ν μ λ μκ°μ λνλΈλ€. (time(2) μ°Έκ³ .)
struct timespec {
time_t tv_sec; /* μ΄ */
long tv_nsec; /* λλ
Έμ΄ */
};μ±κ³΅ μ μ΄ ν¨μλ€μ 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μμ μ΄ ν¨μλ€μ΄ μ²μ λ±μ₯νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
| μΈν°νμ΄μ€ | μμ± | κ° |
|---|---|---|
pthread_tryjoin_np(),pthread_timedjoin_np()
|
μ€λ λ μμ μ± | MT-Safe |
μ΄ ν¨μλ€μ λΉνμ€ GNU νμ₯μ΄λ€. κ·Έλμ μ΄λ¦ λ€μ "_np"(nonportable: μ΄μμ± μμ)κ° λΆμ΄ μλ€.
λ€μ μ½λλ μ΅λ 5μ΄ λμ ν©λ₯λ₯Ό κΈ°λ€λ¦°λ€.
struct timespec ts;
int s;
...
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
/* μ€λ₯ μ²λ¦¬ */
}
ts.tv_sec += 5;
s = pthread_timedjoin_np(thread, NULL, &ts);
if (s != 0) {
/* μ€λ₯ μ²λ¦¬ */
}clock_gettime(2), pthread_exit(3), pthread_join(3), pthreads(7)
2017-09-15