首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

cout多线程输出纷乱?

2013-01-04 
cout多线程输出混乱???int index 50DWORD WINAPI ThreadA(LPVOID lparm){while(TRUE){if(index 0){//

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创建线程
[解决办法]
你应该给这两个线程加锁
[解决办法]
最终还是要通过同步来达到预期的效果。

热点排行