Multithreading in C language: [I'm asking for explanation]

Viewed 94

Can please some one explain the output of the code below!
I was working with threads in C language, and caught my eye that sometimes the output of the programs is not totally one of my prediction. So I tried to write this code to understand more..

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

void * threadfun(void *arg){
    printf("Hello from thread id %ld\n",*(pthread_t*)arg);
    return NULL;
}
int main (int argc, char *argv[]){
    pthread_t tid;
    void * (*fp)(void*) = &threadfun;
    printf("The Main program. pid = %d.\n",getpid());
    pthread_create(&tid, NULL,fp,(void*)&tid);
    printf("%ld was the thread id.\n",tid);
    //pthread_join(tid, NULL);
    printf("ENd. \n");
    return 0;
}

I comment out the join function on purpose.
The output of this code was sometimes something like this:

gcc (Debian 11.2.0-10) 11.2.0

└─$ gcc s1_LD_thread01.c -o out_s1_thread01 -lpthread

└─$ ./out_s1_thread01                                  
The Main program. pid = 8683.
140305239197248 was the thread id.
ENd. 
Hello from thread id 140305239197248
Hello from thread id 140305239197248

I am wondering why the created thread outputting two strings.!

0 Answers
Related