#include<windows.h>
#include<iostream>using namespace std;int a = 1,b = 2,c = 3,result = 0;
DWORD WINAPI thread1(LPVOID param)
{
    result = a + b;
return 0;
}DWORD WINAPI thread2(LPVOID param)
{
    result += c;
return 0;
}int main()
{
HANDLE t1 = CreateThread(NULL,0,thread1,NULL,0,NULL);
HANDLE t2 = CreateThread(NULL,0,thread2,NULL,0,NULL);
CloseHandle(t1);
CloseHandle(t2);
Sleep(5);
cout<<result<<endl;
return 0;
}自己执行几次结果都为6,可result明明被2线程同时访问不会发生什么问题?

解决方案 »

  1.   

    #include<windows.h>
    #include<iostream>using namespace std;int a = 1,b = 5,c = 3,result = 0;
    DWORD WINAPI thread1(LPVOID param)
    {
    Sleep(500);
    result = a + b;
    return 0;
    }DWORD WINAPI thread2(LPVOID param)
    { result += c;
    return 0;
    }int main()
    {
    HANDLE t1 = CreateThread(NULL,0,thread1,NULL,0,NULL);
    HANDLE t2 = CreateThread(NULL,0,thread2,NULL,0,NULL);
    CloseHandle(t1);
    CloseHandle(t2);
    Sleep(1000);
    cout<<result<<endl;
    return 0;
    }
    楼主看下这个 注意我把b=5
    程序创建这两个线程的时间是有先后顺序的吧,中间应该有间隔
      

  2.   

    因为你先create thread1,所以1会先开始执行。
    你要想公平,可以线程等待个事件,如同发令枪,setevent,大家开始跑!