[英]How long after pthread_exit() can pthread_join() be expected to succeed?
[英]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.