簡體   English   中英

如果線程在調用pthread_join之前退出會怎么樣?

[英]What if thread exits before calling pthread_join

我有一個小代碼

void *PrintHello(void *threadid)
{
   cout<<"Hello"<<endl;
   pthread_exit(NULL);
}

int main ()
{
   pthread_t threads_id;
   pthread_create(&threads_id, NULL, PrintHello, NULL);
   int i=0;
   for(;i<100;i++){cout<<"Hi"<<endl;}   
   pthread_join(threads_id,NULL);
   return 0;
}

我在創作后的某個時候加入了這個帖子。 如果主要嘗試加入已經退出的線程會發生什么?

如果主要嘗試加入已經退出的線程會發生什么?

連接操作將立即完成並返回。

從技術上講,有多種可能的行為。

如果你在線程死后不久加入一個線程,那么句柄可能仍然有效, pthread_join將立即返回。

如果線程在調用pthread_join之前完全結束,則thread_t句柄不再有效,並且它應該使用ESRCH返回失敗。

在非常非常極端的情況下,如果你加入一個很久以前已經死的線程,這樣的句柄可以重用,你加入了一個不同的線程。

TL; DR:進行適當的同步(例如退出標志)並檢查返回的錯誤。

暫無
暫無

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

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