用原子操作处理多线程数据

简单使用

#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