多线程中printf与输入输出流的区别?该如何解决
多线程中printf与输入输出流的区别?
问题:写多线程上述操作最基本实例的时候,发现了用printf能正常逐行打印输出,而用cout<<输出流则出现并行输出的现象,大牛们解释一下为什么?谢谢! 2012-8-27pm20:00
------解决方案--------------------
一个是C库,一个是C++库。两者的缓冲方式有所不同,而且使用相互独立的缓冲区。printf是传统的行缓冲,cout则是基于字符的缓冲。
注意同一个程序中不要混合两种输出方式,有可能导致输出混乱。
- C/C++ code
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
------解决方案--------------------
一个是C库,一个是C++库。两者的缓冲方式有所不同,而且使用相互独立的缓冲区。printf是传统的行缓冲,cout则是基于字符的缓冲。
注意同一个程序中不要混合两种输出方式,有可能导致输出混乱。