有个奇怪的有关问题!关于Interlocked系列函数的
有个奇怪的问题!关于Interlocked系列函数的
今天学习了一下多线程,但是让我有点奇怪的问题是,我写的例子,使用的是Interlocked系列函数,但是最后的数据却出现不同步的情况!这是怎么回事呢?
师兄说,不一定要调这个函数,可以用汇编去写,这样代价更低,请问是怎么做的?
下面是我的例子,敢问这是怎么回事呢?Interlocked函数出问题了么?

------解决方案--------------------
看看第三个参数的含义
今天学习了一下多线程,但是让我有点奇怪的问题是,我写的例子,使用的是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;
}
thread
多线程
汇编
------解决方案--------------------
看看第三个参数的含义