用户模式的线程同步原子访问:InterLocked互锁函数

(1) LONG InterlockedExchangeAdd ( LPLONG Addend, LONG Increment );

Addend为长整型变量的地址,Increment为想要在Addend指向的长整型变量上增加的数值(可以是负数)。这个函数的主要作用是保证这个加操作为一个原子访问。
(2) LONG InterlockedExchange( LPLONG Target, LONG Value );
用第二个参数的值取代第一个参数指向的值。函数返回值为原始值。
(3) PVOID InterlockedExchangePointer( PVOID *Target, PVOID Value );
用第二个参数的值取代第一个参数指向的值。函数返回值为原始值。
(4) LONG InterlockedCompareExchange( LPLONG Destination, LONG Exchange, LONG Comperand );
如果第三个参数与第一个参数指向的值相同,那么用第二个参数取代第一个参数指向的值。函数返回值为原始值。
(5) PVOID InterlockedCompareExchangePointer (PVOID *Destination, PVOID Exchange, PVOID Comperand );
如果第三个参数与第一个参数指向的值相同,那么用第二个参数取代第一个参数指向的值。函数返回值为原始值。

(6)LONG InterLockedIncrement(LPLONG lpAddend);  加1

(7)LONG InterLockedDecrement(LPLONG lpAddend); 减1

刚开始看时,不明白为什么要有Exchange的字眼,后来想明白了,原来Exchange体现在返回值上.象下面一样.

#include <stdio.h> #include <string.h> #include <windows.h> int g_Test = 3; int main(void) { int g_TestBefore = 8; g_TestBefore = InterlockedExchange((long*)&g_Test,g_TestBefore); printf("%d %d/r/n",g_Test,g_TestBefore); return 0; }

你可能感兴趣的:(用户模式的线程同步原子访问:InterLocked互锁函数)