我使用 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);
}
在执行代码时,我得到以下输出:
主线程 ID:0xb7880b30 新线程 ID:0xb787eb70 我要走了 分段故障
正如我所研究的,调用 pthread_join 的线程(pid2)将阻塞,直到传入参数(pid1)的线程调用 pthread_exit()。pthread_exit() 用于停止特定线程的执行,让所有其他线程继续执行。
我想知道为什么我最后得到了分段错误。
请正确解释我。