pthread_join 또는 pthread_detach 서브루틴
용도
지정된 스레드가 종료될 때까지 호출 스레드를 차단하거나 분리합니다.
라이브러리
스레드 라이브러리 (libpthreads.a)
구문
#include <pthread.h>
int pthread_join (thread, status)
pthread_t thread;
void **status;
int pthread_detach (thread)
pthread_t thread;설명
pthread_join 서브루틴은 스레드 thread 가 종료될 때까지 호출 스레드를 차단합니다. 대상 스레드의 종료 상태는 status 매개변수에서 리턴됩니다.
대상 스레드가 이미 종료되었지만 아직 분리되지 않은 경우 서브루틴은 즉시 리턴합니다. 아직 종료되지 않은 경우에도 분리된 스레드를 결합할 수 없습니다. 결합된 모든 스레드가 깨어난 후 대상 스레드가 자동으로 분리됩니다.
이 서브루틴 자체로 인해 스레드가 종료되지는 않습니다. pthread_cond_wait 서브루틴과 같이 작동하여 특수 조건을 대기합니다.
pthread_detach 서브루틴은 스레드 ID가 thread 위치에 있는 스레드에 대한 기억장치가 해당 스레드가 종료될 때 재생될 수 있음을 구현에 표시하는 데 사용됩니다. 이 스토리지는 스레드가 분리되었는지 여부에 관계없이 프로세스 종료 시 재확보되며 thread 리턴값에 대한 스토리지를 포함할 수 있습니다. thread 가 아직 종료되지 않은 경우, pthread_detach 는 이를 종료하지 않습니다. 동일한 대상 스레드에서 여러 pthread_detach 호출을 수행하면 오류가 발생합니다.
매개변수
| 항목 | 설명 |
|---|---|
| 스레드 | 대상 스레드를 지정합니다. |
| 상태 | 대상 스레드의 종료 상태가 저장될 위치를 가리킵니다. 값이 NULL인 경우 종료 상태가 리턴되지 않습니다. |
리턴 값
성공하면 pthread_join 함수는 0을 리턴합니다. 그렇지 않으면 오류를 표시하기 위해 오류 번호가 리턴됩니다.
오류 코드
다음과 같은 경우 pthread_join 및 pthread_detach 함수가 실패합니다.
| 항목 | 설명 |
|---|---|
| EINVAL | 구현에서 스레드가 지정한 값이 결합 가능한 스레드를 참조하지 않음을 발견했습니다. |
| ESRCH | 제공된 스레드 ID로 지정된 스레드에 해당하는 스레드를 찾을 수 없습니다. |
다음과 같은 경우 pthread_join 함수가 실패합니다.
| 항목 | 설명 |
|---|---|
| EDEADLK | 스레드 값은 호출 스레드를 지정합니다. |
pthread_join 함수는 EINTR의 오류 코드를 리턴하지 않습니다.