LONG
InterlockedExchange(
IN OUT PLONG Target,
IN LONG Value
);
这个就是相当于赋值用,例如
InterlockedExchange (
&m_PinsWithResources,
0
);
LONG
InterlockedCompareExchange(
IN OUT PLONG Destination,
IN LONG Exchange,
IN LONG Comparand
);
这个一般做if里的判断条件(满足条件时同时赋值),例如
for (i = Page % 1024; i < 1024; i++, Pte++)
{
if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0))
{
break;
}
}
InterlockedXXXX和ExInterlockedXXXX函数比较
1.InterlockedXXXX不需要spin lock,而ExInterlockedXXXX需要
2.InterlockedXXXX是针对加减法,或者指令很少运算的函数,InterlockedXXXX一般都是内联函数
ExInterlockedXXXX是针对一系列复杂操作的函数,例如对队列,如ExInterlockedInsertTailList