NAME

pthread_exit - 호출 스레드 종료하기

SYNOPSIS

#include <pthread.h>

return void pthread_exit(void *retval);

-pthread로 링크.

DESCRIPTION

pthread_exit() 함수는 호출 스레드를 종료하고 (스레드가 합류 가능이면) retval을 통해 어떤 값을 반환한다. 같은 프로세스 내의 다른 스레드가 pthread_join(3)을 호출해서 그 값을 얻을 수 있다.

pthread_cleanup_push(3)로 설정했는데 아직 꺼내지 않은 정리 핸들러가 있으면 (집어넣은 순서 반대로) 꺼내서 실행한다. 스레드에 스레드별 데이터가 있으면 정리 핸들러가 실행된 후에 대응하는 소멸자 함수들이 명세되지 않은 순서로 호출된다.

스레드가 종료할 때는 프로세스 공유 자원들(가령 뮤텍스, 조건 변수, 세마포어, 파일 디스크립터)이 해제되지 않으며 atexit(3)로 등록한 함수들이 호출되지 않는다.

프로세스의 마지막 스레드가 종료하고 나면 종료 상태 0으로 exit(3)을 호출한 것처럼 프로세스가 종료한다. 그에 따라 프로세스 공유 자원들이 해제되고 atexit(3)으로 등록한 함수들이 호출된다.

RETURN VALUE

이 함수는 호출자에게 반환하지 않는다.

ERRORS

이 함수는 항상 성공한다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
pthread_exit() 스레드 안전성 MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008.

NOTES

메인 스레드 아닌 스레드의 시작 함수에서 반환을 수행하면 묵시적으로 pthread_exit()을 호출하며 함수 반환 값을 스레드 종료 상태로 쓴다.

다른 스레드들이 실행을 계속하게 하려면 메인 스레드에서 exit(3) 대신 pthread_exit()을 호출해서 종료해야 한다.

retval이 가리키는 값이 호출 스레드의 스택에 위치해서는 안 된다. 스레드가 종료한 후에는 그 스택의 내용이 규정되어 있지 않기 때문이다.

BUGS

스레드 그룹 리더가 죽은 정지된 스레드 그룹에 wait(2) 하는 커널 구현 로직에 현재 한계가 있다. 스레드 그룹 리더가 이미 pthread_exit()을 호출한 전경 프로세스에게 정지 시그널을 보내면 터미널이 잠기는 것 같은 문제로 그 한계가 드러날 수 있다.

SEE ALSO

pthread_create(3), pthread_join(3), pthreads(7)


2021-03-22