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.