[英]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.