Я выполнил этот многопоточный код C и просто не понимаю вывод, если кто-нибудь объяснит его.
Примечание: я новичок в многопоточном программировании
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int myglobal=0;
void *thread_function(void *arg){
int i, j;
for(i=0;i<20;i++){
j=myglobal;
j=j+1;
printf(".");
fflush(stdout);
sleep(1);
myglobal=j;
}
return NULL;
}
int main(void){
pthread_t mythread;
int i;
if(pthread_create(&mythread, NULL, thread_function, NULL)){
fprintf(stderr, "Error, pthread_create\n");
exit(EXIT_FAILURE);
}
for(i=0;i<20;i++){
myglobal=myglobal+1;
printf("o");
fflush(stdout);
sleep(1);
}
if(pthread_join(mythread, NULL)){
fprintf(stderr, "Error, pthread_join.");
exit(EXIT_FAILURE);
}
printf("\nmyglobal = %d\n", myglobal);
exit(0);
}
Вывод:
o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.o.
myglobal = 21
Почему именно главный поток начинает вывод? не предполагается, что mythread
будет первым, так как у нас есть pthread_create
перед for
l oop. Я хотел бы узнать, как работает это приложение.