cout多线程输出混乱???
int index = 50;
DWORD WINAPI ThreadA(LPVOID lparm)
{
while(TRUE)
{
if(index > 0)
{
//cout<<"1剩余:"<< index-- <<endl;
printf("1剩余%d\n", index --);
}
else
{
break;
}
/*Sleep(1);*/
}
return 0;
}
DWORD WINAPI ThreadB(LPVOID lparm)
{
while(TRUE)
{
if(index > 0)
{
//cout<<"2剩余:"<< index-- <<endl;
printf("2剩余%d\n", index --);
}
else
{
break;
}
/*Sleep(1);*/
}
return 0;
}
int main(void)
{
HANDLE hdlA = CreateThread(NULL, 0, ThreadA, NULL, 0, NULL);
HANDLE hdlB = CreateThread(NULL, 0, ThreadB, NULL, 0, NULL);
CloseHandle(hdlA);
CloseHandle(hdlB);
Sleep(3000);
return 0;
代码很简单,如上
使用cout,输出会变乱
1剩余:2剩余:5049
1剩余:2剩余:4847
1剩余:2剩余:4645
1剩余:2剩余:4443
而使用printf正常.
1剩余50
2剩余49
1剩余48
2剩余47
1剩余46
2剩余45
1剩余44
2剩余43
1剩余42
2剩余41
cout如果取消注释sleep
则输出结果如下,还是比较混乱?
为何?
2剩余:1剩余:4443
1剩余:2剩余:4241
1剩余:2剩余:4039
2剩余:1剩余:3837
2剩余:1剩余:3635
2剩余:1剩余:3433
1剩余:2剩余:3231
2剩余:1剩余:3029
2剩余:1剩余:2827
2剩余:1剩余:2625
2剩余:24
1剩余:23
2剩余:1剩余:2221
2剩余:20
1剩余:19
2剩余:18
1剩余:2剩余:1716
1剩余:15
2剩余:14
1剩余:13
2剩余:12
1剩余40
[解决办法]
改用_beginthreadex创建线程
[解决办法]
你应该给这两个线程加锁
[解决办法]
最终还是要通过同步来达到预期的效果。