C - неожиданный вывод многопоточного кода - PullRequest
0 голосов
/ 19 июня 2020

Я выполнил этот многопоточный код 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. Я хотел бы узнать, как работает это приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...