1.简介
原子访问,指的是一个线程在访问某个资源的同时能够保证没有其他线程会在同一时刻访问同一资源。
以下列举了部分函数。
- InterlockedAdd
- InterlockedMin
- InterlockedMax
- InterlockedOr
- InterlockedAnd
- InterlockedXor
- InterlockedCompareStore
- InterlockedCompareExchange
- InterlockedExchange
- .....
2.示例
这里举例了一个自增的操作,创建了3个线程,调用InterlockedAdd函数自增。
// Interlocked.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <windows.h>
#define THREADCOUNT 3
DWORD WINAPI add(LPVOID);
long g_x = 0;
int main()
{
HANDLE aThread[THREADCOUNT];
DWORD ThreadID;
int i;
for (i = 0; i < THREADCOUNT; i++)
{
aThread[i] = CreateThread(
NULL, // default security attributes
0, // default stack size
(LPTHREAD_START_ROUTINE)add,
NULL, // no thread function arguments
0, // default creation flags
&ThreadID); // receive thread identifier
if (aThread[i] == NULL)
{
printf("CreateThread error: %d\n", GetLastError());
return 1;
}
}
WaitForMultipleObjects(THREADCOUNT, aThread, TRUE, INFINITE);
// Close thread and mutex handles
for (i = 0; i < THREADCOUNT; i++)
CloseHandle(aThread[i]);
return 0;
}
DWORD WINAPI add(LPVOID lpParam)
{
UNREFERENCED_PARAMETER(lpParam);
InterlockedAdd(&g_x, 1);
printf("Thread %d :g_x = %d\n",
GetCurrentThreadId(), g_x);
return TRUE;
}