繁体   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