스레드를 생성할 때 메소드 pthread_exit(NULL)
에서 메소드를 사용하는 이유는 무엇입니까?main()
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
void *message(void *arg){
char *myMessage = (char*)arg;
printf("%s\n", myMessage);
}
int main(void){
pthread_t arr[2];
char *messages[2] = {"Hello", " World"};
if( pthread_create(&arr[0], NULL, message, &messages[0]) != 0 ){
printf("Creating thread failed");
}
if( pthread_create(&arr[1], NULL, message, &messages[1]) != 0 ){
printf("Creating thread failed");
}
pthread_exit(NULL); -> WHY
}
답변1
이 내용은 다음과 같이 기록됩니다.이 pthread_exit(3)
도움말 페이지:
다른 스레드가 계속 실행되도록 하려면 기본 스레드가
pthread_exit()
다음을 호출 해야 합니다.exit(3)
.
기본적으로 스레드를 시작하면 현재 실행 "컨텍스트"도 스레드입니다. 새 스레드의 수명은 기본 스레드에 연결되지 않을 수 있으므로 main
함수를 종료해야 합니다. pthread_exit()
그렇지 않으면 호출이 종료되고 exit()
( 에서 반환된 후 발생 main
) 이로 인해 모든 프로세스 스레드가 중지됩니다.
끝에서는 main
다른 스레드에 대한 반환 값 제공에 신경 쓰지 않으므로 에 대한 NULL
인수를 사용합니다 pthread_exit()
.
답변2
에서 man pthread_exit
:
다른 스레드가 계속해서 실행되도록 하려면, exit(3) 대신 pthread_exit()를 호출하여 메인 스레드를 종료해야 합니다.
exit()
이것으로부터 나는 (또는 단순히 에서 main
) 복귀하면 프로세스(및 다른 모든 스레드)가 즉시 종료되는 반면, 호출은 pthread_exit()
다른 스레드가 작업을 완료할 때까지 프로세스 종료를 지연시킨다는 결론을 내렸습니다 .