Почему 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()? то есть зачем выходить main не разрушая printHello нить и позволяя это продолжить?

0

Решение

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

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

2

Другие решения

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

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

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

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

2

По вопросам рекламы [email protected]