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

时间:2011-09-30 15:52:46

标签: sockets pthreads posix

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

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,那么我会暂停,直到子线程完成执行,或者我继续创建另一个线程?????

4 个答案:

答案 0 :(得分:2)

来自the POSIX spec

  

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

如果这不是您想要的,请将调用推迟到pthread_join(将所有pthread_t放在容器中,以便稍后加入)或使用pthread_detach,这样您根本不需要加入它们

答案 1 :(得分:1)

加入调用阻塞,直到线程退出

答案 2 :(得分:1)

您可能希望使用非阻塞套接字来处理许多客户端,而无需为每个客户端创建一个线程。有关详细信息,请参阅引用The C10K problem

答案 3 :(得分:1)

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