多线程中printf与输入输出流的区别?

铭毅天下
大数据领域优质创作者
博客专家认证
2012-09-02 11:20:39

int g_cnt;
unsignedint _stdcall ThreadProc1(PVOID lpParameter)
{
g_cnt++;
printf("subThreadis running! g_cnt = %d\n",g_cnt);
// cout << "subThread is running!g_cnt = " << g_cnt << endl; //此处和printf打印在多线程操作中的区别?
return 0;
}

int main()
{
g_cnt = 0;
const int nThreadNum = 5;
HANDLE hThread1[nThreadNum];
//Caution...!
for( int i=0; i < nThreadNum; i++)
{
hThread1[i]=(HANDLE)_beginthreadex(NULL,0,ThreadProc1,NULL,0,NULL);
}
WaitForMultipleObjects(nThreadNum,hThread1,true,INFINITE);

_endthreadex(0);
return 0;

}

-------------------------------------------------------------------*/
问题:写多线程上述操作最基本实例的时候,发现了用printf能正常逐行打印输出,而用cout<<输出流则出现并行输出的现象,大牛们解释一下为什么?谢谢! 2012-8-27pm20:00
...全文
224 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
辰岡墨竹 2012-09-03
  • 打赏
  • 举报
回复
一个是C库,一个是C++库。两者的缓冲方式有所不同,而且使用相互独立的缓冲区。printf是传统的行缓冲,cout则是基于字符的缓冲。
注意同一个程序中不要混合两种输出方式,有可能导致输出混乱。
铭毅天下 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

一个是C库,一个是C++库。两者的缓冲方式有所不同,而且使用相互独立的缓冲区。printf是传统的行缓冲,cout则是基于字符的缓冲。
注意同一个程序中不要混合两种输出方式,有可能导致输出混乱。
[/Quote]
哦,还真没注意,谢谢!

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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