InterlockedIncrement同步失败
写了个小程序测试原子操作的同步,结果发现无论怎么测试,都不能保证同步,不知道什么原因。
下面这个程序创建了2000个线程,如果同步的话,global_data应该为2000,但多运行几次,就会出现1999,2001,1968等结果,不知道为何。
请教大家~
#define THREADNO 2000
volatile long global_data=0;
unsigned int WINAPI Increase(PVOID par);
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE threads[THREADNO];
unsigned int id;
for(int i=0;i<THREADNO;i++)
{
thread[i]=(HANDLE)_beginthreadex(NULL,0,Increase,NULL,0,&id);
}
WaitForMultipleObjects(THREADNO,threads,true,INFINITE);
prinft("%i",global_data);
}
unsigned int WINAPI Increase(PVOID par)
{
InterlockedIncrement(&global_data);
return 0;
}