Criação de Threads

0

Por que usamos o método pthread_exit(NULL) no método main() ao criar tópicos?

#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
}
    
por Goktug 06.03.2018 / 17:15

2 respostas

2

Isso está documentado em a pthread_exit(3) manpage :

To allow other threads to continue execution, the main thread should terminate by calling pthread_exit() rather than exit(3).

Basicamente, quando você inicia threads, o contexto de execução atual também é um thread. Os novos segmentos têm um ciclo de vida que pode não estar relacionado ao segmento principal; então você precisa terminar sua função main com pthread_exit() , caso contrário você vai acabar chamando exit() (é o que acontece depois que você retorna de main ), e isso irá parar todos os threads do processo. p>

No final de main , você não se preocupa em fornecer um valor de retorno para qualquer outro segmento, daí o uso de NULL como argumento para pthread_exit() .

    
por 06.03.2018 / 17:18
1

De man pthread_exit :

To allow other threads to continue execution, the main thread should terminate by calling pthread_exit() rather than exit(3).

A partir disso, concluiria que exit() (ou simplesmente retornando de main ) encerrará o processo (e todos os outros encadeamentos) imediatamente, enquanto chamar pthread_exit() adiará a finalização do processo até que os outros encadeamentos termine seu trabalho.

    
por 06.03.2018 / 17:18

Tags