Я новичок в многопоточном программировании и у меня есть вопрос о pthreads.
Это тестовый код, который я запускаю, и я не понимаю его поведение. Может кто-нибудь пролить свет на это, пожалуйста.
void *t1(void *args){
printf("returning from t1\n");
return;
}
void *t2(void *args){
printf("returning from t2\n");
return;
}
int main(){
pthread_t thread1,thread2;
int r1,r2;
r1=pthread_create(&thread1,NULL,t1,NULL);
r2=pthread_create(&thread2,NULL,t2,NULL);
pthread_join(thread1,NULL);
// pthread_join(thread2,NULL);
return 0;
}
Поведение этой программы одно из 5, показанных ниже
murtuza@murtuza:FFTW$ ./ptest
returning from t2
returning from t1
murtuza@murtuza:FFTW$ ./ptest
returning from t1
returning from t2
murtuza@murtuza:FFTW$ ./ptest
returning from t1
murtuza@murtuza:FFTW$ ./ptest
returning from t2
returning from t2
murtuza@murtuza:FFTW$ ./ptest
returning from t1
returning from t2
returning from t2
Я не понимаю 4-й и 5-й выход. Почему поток t2 выполняется дважды? Конечно, если я раскомментирую pthread_join(&thread2,NULL,t2,NULL)
программа будет работать правильно, но меня особенно интересует случай, когда к основному потоку присоединяется только один поток.
спасибо,
Мир