cout多线程输出混乱???

火星大能猫 2012-11-23 11:50:15

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
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2012-11-23
  • 打赏
  • 举报
回复
最终还是要通过同步来达到预期的效果。
转角天边 2012-11-23
  • 打赏
  • 举报
回复
你应该给这两个线程加锁
  • 打赏
  • 举报
回复
改用_beginthreadex创建线程

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧