将指向void *的指针传递给pthread_join的目的是什么?

时间:2012-05-10 06:59:57

标签: c pthreads

pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;

我上面有这个代码,定义void * ignore和连接的目的是什么? 我在使用它时遇到了分段错误。

3 个答案:

答案 0 :(得分:2)

第二个参数的要点是从线程中获取返回的参数。

像退出代码一样。但由于这也可能是您要返回的对象的地址,因此void**可以修改void*。如果您查看签名,它实际上是函数所期望的void**,并且您将传递给它。

如果你不需要它,我认为是你的情况。只需通过null

  

使用非NULL value_ptr参数从成功的pthread_join()调用返回时,终止线程传递给pthread_exit()的值在value_ptr引用的位置可用。

男:pthread_join

答案 1 :(得分:1)

pthread_join的目的是“将创建的线程”加入调用者线程...... 这可以确保你的线程在进程从main .....的结束括号中脱落之前就可以运行了。

例如:

//code
#include <stdio.h>
#include <pthread.h>
void *func(void *arg)
{
printf ("inside the thread %d\n",pthread_self());
return NULL;
}

int main (void)
{
pthread_t tid;

pthread_create (&tid,NULLm func,NULL);

pthread_join (tid,NULL);

return 0;
}

答案 2 :(得分:1)

pthread_join的主要目的是将同步调用线程与被调用线程。调用线程被挂起,直到被调用的线程退出。

例如,您从主函数调用pthread_create并创建线程。如果你不等待线程退出,你的主函数/进程就会退出,从而无论它是否完成了它的工作,它也会随之杀死它。

同样如评论中所述,您可以将NULL作为第二个参数传递给pthread_join。使用未初始化的指针通常会导致分段错误。另外,我很好奇,您如何使用(取消引用)ignore这是一个void指针?可能是你投了?