我的程序是这样的..我想知道如果我调用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,我是会在该点暂停,直到子线程完成执行,还是继续创建另一个线程?
发布于 2011-10-02 05:15:42
pthread_join()会一直阻塞,直到子线程退出,但是您仍然希望/需要调用它,以便在子线程离开后能够正确地清除它。但是正如你所说的,你不想让你的主线程被阻塞,那么该如何处理呢?我这样做的方式是让子线程在它退出之前(通过套接字对或其他机制)向它的父线程发送回一条消息。当父线程收到此消息时,它知道现在是调用pthread_join()的好时机,因为子线程已经消失(或几乎消失),因此pthread_join永远不会阻塞(或者至少不会超过几毫秒)。
发布于 2011-09-30 23:54:51
来自the POSIX spec
pthread_join()函数将暂停调用线程的执行,直到目标线程终止,除非目标线程已经终止。
如果这不是你想要的,要么推迟调用pthread_join (将所有的pthread放在一个容器中,这样你以后就可以加入它们),要么使用pthread_detach,这样你根本不需要加入它们。
发布于 2011-09-30 23:54:42
join调用会一直阻塞,直到线程退出
https://stackoverflow.com/questions/7612951
复制相似问题