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.h 헤더 파일은 스레드 라이브러리를 사용하는 각 소스 파일의 첫 번째 포함 파일이어야 합니다. 그렇지 않으면 -D_THREAD_SAFE 컴파일 플래그를 사용하거나 cc_r 컴파일러를 사용해야 합니다. 이 경우 플래그가 자동으로 설정됩니다.

pthread_detach 서브루틴은 스레드 ID가 thread 위치에 있는 스레드에 대한 기억장치가 해당 스레드가 종료될 때 재생될 수 있음을 구현에 표시하는 데 사용됩니다. 이 스토리지는 스레드가 분리되었는지 여부에 관계없이 프로세스 종료 시 재확보되며 thread 리턴값에 대한 스토리지를 포함할 수 있습니다. thread 가 아직 종료되지 않은 경우, pthread_detach 는 이를 종료하지 않습니다. 동일한 대상 스레드에서 여러 pthread_detach 호출을 수행하면 오류가 발생합니다.

매개변수

항목 설명
스레드 대상 스레드를 지정합니다.
상태 대상 스레드의 종료 상태가 저장될 위치를 가리킵니다. 값이 NULL인 경우 종료 상태가 리턴되지 않습니다.

리턴 값

성공하면 pthread_join 함수는 0을 리턴합니다. 그렇지 않으면 오류를 표시하기 위해 오류 번호가 리턴됩니다.

오류 코드

다음과 같은 경우 pthread_joinpthread_detach 함수가 실패합니다.

항목 설명
EINVAL 구현에서 스레드가 지정한 값이 결합 가능한 스레드를 참조하지 않음을 발견했습니다.
ESRCH 제공된 스레드 ID로 지정된 스레드에 해당하는 스레드를 찾을 수 없습니다.

다음과 같은 경우 pthread_join 함수가 실패합니다.

항목 설명
EDEADLK 스레드 값은 호출 스레드를 지정합니다.

pthread_join 함수는 EINTR의 오류 코드를 리턴하지 않습니다.