pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;
我上面有这个代码,定义void * ignore和连接的目的是什么? 我在使用它时遇到了分段错误。
答案 0 :(得分:2)
第二个参数的要点是从线程中获取返回的参数。
像退出代码一样。但由于这也可能是您要返回的对象的地址,因此void**
可以修改void*
。如果您查看签名,它实际上是函数所期望的void**
,并且您将传递给它。
如果你不需要它,我认为是你的情况。只需通过null
使用非NULL value_ptr参数从成功的pthread_join()调用返回时,终止线程传递给pthread_exit()的值在value_ptr引用的位置可用。
答案 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
指针?可能是你投了?