问题2:下面的两个线程输出不一样,为啥。
#include <iostream>
#include <process.h>
#include <Windows.h>int g_nTest = 0;unsigned int _stdcall Fun1(void *)
{
int const &nTest = g_nTest; while (true)
{
std::cout<<"线程1 nTest = "<<static_cast<int>(nTest)<<std::endl;
Sleep(1000);
} return 0;
}unsigned int _stdcall Fun2(void *)
{ double const &nTest = g_nTest; while (true)
{
std::cout<<"线程2 nTest = "<<static_cast<int>(nTest)<<std::endl;
Sleep(1000);
} return 0;
}int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hHandle1 = (HANDLE)_beginthreadex(0,0,Fun1,0,0,0);
CloseHandle(hHandle1); Sleep(10);
HANDLE hHandle2 = (HANDLE)_beginthreadex(0,0,Fun2,0,0,0);
CloseHandle(hHandle2);
while (true)
{
++g_nTest;
Sleep(1000);
}
getchar();
return 0;
}问题2:c++的语法如何规定 const的引用,const的引用改变,对象本身改变吗?

解决方案 »

  1.   

    第一个问题是因为这3个线程的执行顺序无法保证,他们都没有按照你想象的顺序去执行
       比如  线程1 --->主线程---->线程2  这样线程1和线程2的结果自然就不一样了
      你去看看线程同步是怎么回事
     
    第二问题  会改变的
      

  2.   

    首先代码里closehandle的位置,我觉得可以放啊在 while{}的后面啊。第一个问题,由于系统来调度线程。
    作者程序中没有加同步互斥,每一个线程调度的时机都不能确定。
    还有,每个线程访问全局变量的时机也不能确定,第二个问题,作者用代码做过测试没有?