0

代码:

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线程并允许它继续?

4

2 回答 2

2

pthread_exit()仅终止调用线程。因此,当您从 调用它时main(),它会终止主线程,同时允许进程继续。这正如预期的那样。

如果您调用exit()(或通过返回隐式退出),它将终止整个过程,您也会看到printHello终止。

于 2015-03-28T08:28:34.690 回答
2

这里有一个很好的资源,但引用解释你的问题的部分:

关于从 main() 调用 pthread_exit() 的讨论:

  • 如果您没有显式调用 pthread_exit(),那么如果 main() 在它产生的线程之前完成,就会有一个明确的问题。它创建的所有线程都将终止,因为 main() 已完成并且不再存在以支持线程。

  • 通过让 main() 显式调用 pthread_exit() 作为它所做的最后一件事,main() 将阻塞并保持活动状态以支持它创建的线程,直到它们完成。

于 2015-03-28T08:28:53.787 回答