首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果子线程仍在工作,pthread_join是否会暂停父程序?pthread_detach会让它更快吗??而不是使用join?

如果子线程仍在工作,pthread_join是否会暂停父程序?pthread_detach会让它更快吗??而不是使用join?
EN

Stack Overflow用户
提问于 2011-09-30 23:52:46
回答 4查看 1.3K关注 0票数 1

我的程序是这样的..我想知道如果我调用pthread join会不会让我的程序变慢?

代码语言:javascript
运行
复制
void* a(void *a)
{
 do---something();//which is a very long procedure, I mean takes a lot of time...
 pthread_exit();
}

main()
{
 while(1)
 {
  pthread_create(a);
  pthread_join(a);
 }
}

那么,如果我调用pthread_join,我是会在该点暂停,直到子线程完成执行,还是继续创建另一个线程?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-02 05:15:42

pthread_join()会一直阻塞,直到子线程退出,但是您仍然希望/需要调用它,以便在子线程离开后能够正确地清除它。但是正如你所说的,你不想让你的主线程被阻塞,那么该如何处理呢?我这样做的方式是让子线程在它退出之前(通过套接字对或其他机制)向它的父线程发送回一条消息。当父线程收到此消息时,它知道现在是调用pthread_join()的好时机,因为子线程已经消失(或几乎消失),因此pthread_join永远不会阻塞(或者至少不会超过几毫秒)。

票数 1
EN

Stack Overflow用户

发布于 2011-09-30 23:54:51

来自the POSIX spec

pthread_join()函数将暂停调用线程的执行,直到目标线程终止,除非目标线程已经终止。

如果这不是你想要的,要么推迟调用pthread_join (将所有的pthread放在一个容器中,这样你以后就可以加入它们),要么使用pthread_detach,这样你根本不需要加入它们。

票数 2
EN

Stack Overflow用户

发布于 2011-09-30 23:54:42

join调用会一直阻塞,直到线程退出

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7612951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档