有个奇怪的有关问题!关于Interlocked系列函数的

有个奇怪的问题!关于Interlocked系列函数的
本帖最后由 huangyiting2012 于 2013-03-15 14:32:04 编辑
今天学习了一下多线程,但是让我有点奇怪的问题是,我写的例子,使用的是Interlocked系列函数,但是最后的数据却出现不同步的情况!这是怎么回事呢?


师兄说,不一定要调这个函数,可以用汇编去写,这样代价更低,请问是怎么做的?
下面是我的例子,敢问这是怎么回事呢?Interlocked函数出问题了么?



#include "stdafx.h"
#include "windows.h"
#include "process.h"

volatile long g_nLoginCount;
const int THREAD_NUM = 50;

unsigned int __stdcall ThreadFun(PVOID pVoid)
{
InterlockedIncrement((LPLONG)&g_nLoginCount);
Sleep(10);
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
int tryCount = 100;
HANDLE handle[THREAD_NUM];

while (tryCount--)
{
g_nLoginCount = 0;

for (int i = 0; i < THREAD_NUM; i++)
{
handle[i] = (HANDLE)_beginthreadex(0, 4096, ThreadFun, 0 ,0, 0);
}

WaitForMultipleObjects(THREAD_NUM, handle, 0, INFINITE);

for (int i = 0; i < THREAD_NUM; i++)
{
CloseHandle(handle[i]);
}

printf("有%d个用户登录后记录结果是%d\n", THREAD_NUM, g_nLoginCount);
}
return 0;
}



有个奇怪的有关问题!关于Interlocked系列函数的
thread 多线程 汇编

------解决方案--------------------
看看第三个参数的含义