簡體   English   中英

為什么pthread_exit的行為類似於pthread_join?

[英]Why pthread_exit acts like 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線程並允許它繼續?

pthread_exit()僅終止調用線程。 因此,當您從main()調用它時,它將終止主線程,同時允許進程繼續進行。 這是預期的。

如果改為調用exit() (或通過返回隱式退出),它將終止整個過程,您還將看到printHello終止。

這里有一個很好的資源但是引用解釋您的問題的部分:

從main()調用pthread_exit()的討論:

  • 如果main()在未顯式調用pthread_exit()的情況下在其產生的線程之前完成,則肯定存在問題。 它創建的所有線程將終止,因為main()已完成,並且不再存在以支持線程。

  • 通過讓main()顯式調用pthread_exit()作為最后一件事,main()將被阻塞並保持活動狀態以支持它創建的線程,直到完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM