스레드 생성

스레드 생성

스레드를 생성할 때 메소드 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()다른 스레드가 작업을 완료할 때까지 프로세스 종료를 지연시킨다는 결론을 내렸습니다 .

관련 정보