编程环境是vc6.0,代码如下:#include <windows.h>
#include <iostream>
using namespace std;
DWORD WINAPI Fun1Proc(LPVOID lp);
DWORD WINAPI Fun2Proc(LPVOID lp);
//HANDLE hMutex;
int ticket=100;int main()
{

HANDLE hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
HANDLE hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
//hMutex=::CreateMutex(NULL,false,NULL);

::CloseHandle(hThread1);
::CloseHandle(hThread2);
::Sleep(4000);

return 0;
}
DWORD WINAPI Fun1Proc(LPVOID lp)
{
     while(true)
 {
 if(ticket>0)
 {
 std::cout<<"this is1: "<<ticket--<<std::endl;
 }
         else
 break;
 }

return 0;
}
DWORD WINAPI Fun2Proc(LPVOID lp)
{
  while(true)
 {
 if(ticket>0)
 {
 std::cout<<"this is2: "<<ticket--<<std::endl;
 }
         else
 break;
 }

return 0;
}
以上输出,线程输出就会乱套,如果用#include <iostream.h> 而不是用#include <iostream> using namespace std; cout输出就正常,请问这是什么原因?

解决方案 »

  1.   

    我知道需要同步,为什么#include <iostream.h>和
    #include <iostream> usingnamespace std;
    cout输出为什么会不同啊?
      

  2.   

    可能cout的实现不同,缓冲方式不同。但都不是多线程安全的。
    试试在cout后调用fflush(stdout);  
      

  3.   

    cout作为一个公共的资源,多个线程同时用的时候也是要同步滴
      

  4.   

    6.0的话就是用#include<iostream.h>
    8.0 9.0都是使用的#include<iostream> usingnamespace std
    7.0忘记了  反正和版本有关
      

  5.   

    记得以前看书的时候 有特别说到关于版本的这一点6.0的时候标准还不健全 还有类似的for(int i = 0; i < 5 ; i++ )
      dosomething();如果是6.0  在后面就不用重新声明变量i但是在后面的版本,i就被定义为循环体里的局部变量了