用原子操作处理多线程数据
简单使用
#include <Windows.h>
#include <process.h>
#include <stdio.h>
#include <stdlib.h>
#define THREADCOUNT 4 //线程数量
int num = 0;
DWORD WINAPI func(void *p)
{
for (int i = 0; i < 10000; i++)
{
InterlockedIncrement(&num); //InterlockedIncrement让num++成为原子操作
//InterlockedExchangeAdd(&num, 1); //效果和InterlockedIncrement一样
}
return 0;
}
int main(int argc, char *argv[])
{
HANDLE hd[THREADCOUNT];
for (int i = 0; i < THREADCOUNT; i++)
{
hd[i] = CreateThread(NULL, 0, func, NULL, 0, NULL);
}
WaitForMultipleObjects(THREADCOUNT, hd, TRUE, INFINITE);
printf("num=%d\n", num);
system("pause");
return 0;
}
原子操作的速度要快于临界区和互斥体
秋风
2016-06-28