#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线程同时访问不会发生什么问题?
#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
程序创建这两个线程的时间是有先后顺序的吧,中间应该有间隔
你要想公平,可以线程等待个事件,如同发令枪,setevent,大家开始跑!