多线程使用printf会有问题吗?
我用多线程写了一段程序大家看一下:
#include <windows.h>
#include <stdio.h>
int count1=0;
int count2=0;
int count3=0;
int count4=0;
int count5=0;
int count6=0;
int count7=0;
int count8=0;
int count9=0;
int count10=0;
DWORD WINAPI No1Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No1Thread:%d\n",count1++);
}
return 0;
}
DWORD WINAPI No2Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No2Thread:%d\n",count2++);
}
return 0;
}
DWORD WINAPI No3Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No3Thread:%d\n",count3++);
}
return 0;
}
DWORD WINAPI No4Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No4Thread:%d\n",count4++);
}
return 0;
}
DWORD WINAPI No5Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No5Thread:%d\n",count5++);
}
return 0;
}
DWORD WINAPI No6Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No6Thread:%d\n",count6++);
}
return 0;
}
DWORD WINAPI No7Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No7Thread:%d\n",count7++);
}
return 0;
}
DWORD WINAPI No8Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No8Thread:%d\n",count8++);
}
return 0;
}
DWORD WINAPI No9Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No9Thread:%d\n",count9++);
}
return 0;
}
DWORD WINAPI No10Thread(LPVOID lpParameter)
{
while(1)
{
Sleep(10);
printf("No10Thread:%d\n",count10++);
}
return 0;
}
void main()
{
unsigned long t1;
unsigned long t2;
unsigned long t3;
unsigned long t4;
unsigned long t5;
unsigned long t6;
unsigned long t7;
unsigned long t8;
unsigned long t9;
unsigned long t10;
char *p=new char;
while(1)
{
CreateThread(NULL,0,No1Thread,(LPVOID)p,0,&t1);
CreateThread(NULL,0,No2Thread,(LPVOID)p,0,&t2);
CreateThread(NULL,0,No3Thread,(LPVOID)p,0,&t3);
CreateThread(NULL,0,No4Thread,(LPVOID)p,0,&t4);
CreateThread(NULL,0,No5Thread,(LPVOID)p,0,&t5);
CreateThread(NULL,0,No6Thread,(LPVOID)p,0,&t6);
CreateThread(NULL,0,No7Thread,(LPVOID)p,0,&t7);
CreateThread(NULL,0,No8Thread,(LPVOID)p,0,&t8);
CreateThread(NULL,0,No9Thread,(LPVOID)p,0,&t9);
CreateThread(NULL,0,No10Thread,(LPVOID)p,0,&t10);
}
}
编译运行时,照理来说每个线程对应某个count值只会打印一次,可是出现有时会打印两次的情况。
如:
...........
No10Thread:502
No10Thread:502
...........
难道多线程使用printf会有问题?
详细运行结果见
http://home1.photoisland.com.cn/sessions/59428769970/1231492.jpg