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

我上面有这段代码,定义 void* 忽略并加入它的目的是什么?使用它时出现分段错误。

4

3 回答 3

2

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

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

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

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

人:pthread_join

于 2012-05-10T07:27:56.777 回答
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;
}
于 2012-05-10T07:05:55.817 回答
1

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

例如,您pthread_create从 main 函数调用并创建线程。如果您不等待线程退出,则您的主函数/进程将退出,从而将创建的线程连同它一起杀死,而不管它是否完成了它的工作。

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

于 2012-05-10T07:09:19.327 回答