pthread_t single_thread ;
pthread_create (&single_thread , NULL , &mywriter , 0) ;
void * ignore ;
pthread_join (single_thread , &ignore) ;
我上面有这段代码,定义 void* 忽略并加入它的目的是什么?使用它时出现分段错误。
第二个参数的重点是从线程中获取返回参数。
类似于退出代码的东西。但由于这也可能是您要返回的对象的地址,void**
因此您可以修改void*
. 如果您查看签名,它实际上是void**
函数所期望的并且您正在传递给它。
如果你不需要它,我认为是你的情况。刚过null
从带有非 NULL value_ptr 参数的成功 pthread_join() 调用返回时,终止线程传递给 pthread_exit() 的值在 value_ptr 引用的位置可用。
好吧 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;
}
的主要目的pthread_join
是使调用线程与被调用线程同步。调用线程被挂起,直到被调用线程退出。
例如,您pthread_create
从 main 函数调用并创建线程。如果您不等待线程退出,则您的主函数/进程将退出,从而将创建的线程连同它一起杀死,而不管它是否完成了它的工作。
同样如评论中所述,您可以将 aNULL
作为第二个参数传递给pthread_join
. 使用未初始化的指针通常会导致分段错误。ignore
另外,我很好奇,您是如何使用(取消引用)void
指针的?可能你被铸造了?