を使ってプログラムを書いていpthread
ます。
環境: Windows 7、CYGWIN_NT-6.1 i686 Cygwin、gcc (GCC) 4.5.3
ソースコード
#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;
}
ソース コードをコンパイルすると、警告やエラーは表示されませんが、出力がおかしいです。
その出力の一部
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
このような現象の原因が知りたいです。
この出力でMain : End Create Thread
は、 は完全には印刷されません。そして 3 行目で、末尾の改行\n
が"Thread Thread Thread Thread\n"
消えます。
みんなのアウトプットはこんな感じ?毎回発生するわけではありませんが、時々発生します。
安全に呼び出すためにミューテックスを使用するとprintf
、奇妙な出力が停止したようです。
POSIXprintf
はスレッドセーフであり、Cygwin.com によると、cygwin は posix スタイルの API を提供します。ただし、予期しない出力があります。
本当にprintf
スレッドセーフですか?
Linux(Ubuntu)で同じプログラムを100回実行しましたが、この出力は出ませんでした。
さらに、出力の一部の単語が消えた理由がわかりません。