多线程中printf与输入输出流的区别?该如何解决

多线程中printf与输入输出流的区别?
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则是基于字符的缓冲。
注意同一个程序中不要混合两种输出方式,有可能导致输出混乱。