2015-03-28 5 views
0

Код:Почему pthread_exit действует как pthread_join?

void *PrintHello(void *threadid) 
{ 
    cout<<"Hello"<<endl; 
    sleep(3); 
    cout<<"Still PrintHello is alive"<<endl; 
} 
int main (int argc, char *argv[]) 
{ 
    pthread_t threads[NUM_THREADS]; 
    cout<<"Calling thread:"<<t<<endl; 
    pthread_create(&threads[0], NULL, PrintHello, NULL); 
    //pthread_join(threads[0],NULL); 
    cout<<"Main exits"<<endl; 
    pthread_exit(NULL); 
} 

Почему pthread_exit(NULL) здесь действует как pthread_join()? i.e Зачем выходить main, не разрушая нить printHello и позволяя продолжить?

ответ

2

pthread_exit() завершает только вызывающую нить. Поэтому, когда вы вызываете его с main(), он завершает основной поток, позволяя продолжить процесс. Это так, как ожидалось.

Если вы вызываете exit() (или неявный выход из него путем возврата), это прекратит весь процесс, и вы также прекратите работу printHello.

2

Там довольно хороший ресурс here но процитировать ту часть, которая объясняет вашу проблему:

Обсуждение на вызов pthread_exit() от основного():

  • Существует ли определенная проблема main() заканчивается перед потоками, которые он породил, если вы не вызываете pthread_exit() явно. Все созданные им потоки прекратятся, потому что main() выполняется и больше не существует для поддержки потоков.

  • Поскольку main() явно вызывает pthread_exit() в качестве последнего, что он делает, main() будет блокироваться и оставаться в живых, чтобы поддерживать созданные им потоки, пока они не будут выполнены.