我的程序是这样的..我想知道如果我调用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,那么我会暂停,直到子线程完成执行,或者我继续创建另一个线程?????
答案 0 :(得分:2)
pthread_join()函数应暂停执行调用 线程直到目标线程终止,除非是目标线程 已经终止了。
如果这不是您想要的,请将调用推迟到pthread_join(将所有pthread_t放在容器中,以便稍后加入)或使用pthread_detach,这样您根本不需要加入它们
答案 1 :(得分:1)
加入调用阻塞,直到线程退出
答案 2 :(得分:1)
您可能希望使用非阻塞套接字来处理许多客户端,而无需为每个客户端创建一个线程。有关详细信息,请参阅引用The C10K problem。
答案 3 :(得分:1)
pthread_join()阻塞,直到子线程退出,但您仍然需要/需要调用它,以便子线程一旦消失就可以正确清理。但正如你所说,你不想让你的主线程被阻止,那么如何应对呢?我这样做的方法是让子线程在它退出之前将消息(通过套接字对或其他机制)发送回其父线程....当父线程收到此消息时,它就知道现在是调用pthread_join()的好时机,因为子线程已经消失(或几乎消失),因此pthread_join永远不会阻塞(或者至少不会超过几毫秒)。