dziwne wyjście, gdy używam pthread i printf

Piszę program używającpthread.

Środowisko: Windows 7, CYGWIN_NT-6.1 i686 Cygwin, gcc (GCC) 4.5.3

Kod źródłowy

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

void *th_func(void *p)
{
    int iLoop = 0;

    for(iLoop = 0;iLoop<100;iLoop++)
    {
        printf("Thread Thread Thread Thread\n");
    }

    return;
}

int main()
{
    int iLoop = 0;
    pthread_t QueThread;

    printf("Main : Start Main\n");

    printf("Main : Start Create Thread\n");
    pthread_create(&QueThread,NULL,th_func,NULL);
    printf("Main : End Create Thread\n");

    for(iLoop = 0;iLoop<100;iLoop++)
    {
        printf("Main Main Main Main\n");
    }

    pthread_join(QueThread,NULL);

    printf("Main : End Main\n");

    printf("---------------\n");

    return 0;
}

Kiedy kompiluję kod źródłowy, nie ma żadnych ostrzeżeń ani błędów, ale jego wynik jest dziwny.

Część tego wyjścia

Main : Start Main
Main : Start Create Thread
Thread Thread Thread ThreThread Thread Thread Thread
Main Main Main Main
Thread Thread Thread Thread
Main Main Main Main

Chcę poznać przyczynę takiego zjawiska.

W tym wyjściuMain : End Create Thread nie jest całkowicie wydrukowany. I w linii 3, nowa linia\n na końcu"Thread Thread Thread Thread\n" znikać.

Czy wszyscy mają takie wyniki? Nie występuje za każdym razem, ale pojawia się czasami.

Jeśli użyję mutex do wywołaniaprintf bezpiecznie, dziwne wyjście wydaje się być zatrzymane.

POSIX mówiprintf jest bezpieczny dla wątków i według Cygwin.com cygwin udostępnia API w stylu posix. Istnieje jednak nieoczekiwane wyjście.

Jestprintf naprawdę bezpieczny dla wątków?

Wykonałem ten sam program 100 razy w systemie Linux (Ubuntu), a to wyjście nie wystąpiło.

Ponadto nie zrozumiałem powodu, dla którego niektóre słowa na wyjściu zniknęły.

questionAnswers(5)

yourAnswerToTheQuestion