gpt4 book ai didi

c - 调用 pthread_join() 后出现段错误

转载 作者:太空狗 更新时间:2023-10-29 17:17:02 24 4
gpt4 key购买 nike

我使用 POSIX pthread 库编写了以下代码:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

pthread_t pid1,pid2;

void *test(void *arg)
{
void **end;
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
pthread_join(pid1,end);
printf("\nNew Thread going to go off\n");
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
return ((void *)NULL);
}

int main()
{
pid1 = pthread_self();
pthread_create(&pid2,NULL,test,NULL);
printf("\nMain Thread ID: 0x%x\n",(unsigned int)pid1);
sleep(2);
printf("\nI am going off\n");
pthread_exit(0);
}

在执行代码时,我得到了以下输出:

Main Thread ID: 0xb7880b30New Thread ID: 0xb787eb70I am going offSegmentation fault

根据我的研究,调用 pthread_join 的线程 (pid2) 将阻塞,直到传入参数 (pid1) 的线程调用 pthread_exit()。 pthread_exit() 用于停止特定线程的执行,让所有其他线程继续执行。

我想知道为什么我最后得到了Segmentation Fault。

请正确解释我。

最佳答案

您正在使用未初始化的变量 void **end;,这会导致未定义的行为:

pthread_join(pid1,end);

你应该做的是:

void *end;
pthread_join(pid1, &end);

即将有意义的指针传递给您想要结果的变量,而不是未初始化的指针。

关于c - 调用 pthread_join() 后出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com