我使用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
未完全打印。\n
在第 3 行,末尾的换行符"Thread Thread Thread Thread\n"
消失了。
大家的输出都是这样的吗?它不会每次都发生,但有时会发生。
如果我使用互斥锁安全调用printf
,奇怪的输出似乎停止了。
POSIX 说printf
是线程安全的,根据 Cygwin.com,cygwin 提供了 posix 风格的 API。但是,有意外的输出。
真的是printf
线程安全的吗?
我在 Linux(Ubuntu)中执行了 100 次相同的程序,并且没有出现此输出。
另外,我一直不明白为什么输出上的一些单词消失了。