I wrote the following code using the POSIX pthread library:
#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); }
When executing the code, I got the following output:
Main Thread ID: 0xb7880b30
New Thread ID: 0xb787eb70
I am going off
Segmentation fault
When I studied, the thread (pid2) that calls pthread_join will block until the thread passed in the argument (pid1) calls pthread_exit (). And pthread_exit () is used to stop the execution of a specific thread, allowing everyone else to continue execution.
I want to know why I finally got Segmentation Fault.
Please explain to me correctly.
source share