I started programming pthread on linux, and in the first program I was completely confused. Below is the program in which I run
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *print_message_function( void *ptr );
int main(){
pthread_t thread1, thread2;
char *message1 = "Thread 1";
char *message2 = "Thread 2";
int iret1, iret2;
iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);
pthread_join( thread1, NULL);
printf("amit");
pthread_join( thread2, NULL);
printf("Thread 1 returns: %d\n",iret1);
printf("Thread 2 returns: %d\n",iret2);
exit(0);
}
void *print_message_function( void *ptr ){
char *message;
message = (char *) ptr;
printf("%s \n", message);
}
The first thing I would like to know is that the order of execution of the threads is not sequential.
Secondly, I intentionally put a seal ("amit"); to see that main really stops when thread1 completes, but in the output we see that the printf statement is executed first. Conclusion of the whole process
Theme 1
Theme 2
amitThread 1 returns: 0
Return flow 2: 0
source
share