InterlockedIncrement同步失败

gngnandgngn 2009-02-14 06:14:53
写了个小程序测试原子操作的同步,结果发现无论怎么测试,都不能保证同步,不知道什么原因。

下面这个程序创建了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;
}
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gngnandgngn 2009-02-14
  • 打赏
  • 举报
回复
原来如此,谢了哈~~
baihacker 2009-02-14
  • 打赏
  • 举报
回复
MAXIMUM_WAIT_OBJECTS
应该是64
baihacker 2009-02-14
  • 打赏
  • 举报
回复
线程数太多...

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧