问题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的引用改变,对象本身改变吗?
#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 --->主线程---->线程2 这样线程1和线程2的结果自然就不一样了
你去看看线程同步是怎么回事
第二问题 会改变的
作者程序中没有加同步互斥,每一个线程调度的时机都不能确定。
还有,每个线程访问全局变量的时机也不能确定,第二个问题,作者用代码做过测试没有?