现在的位置: 首页 > 综合 > 正文

原子操作

2011年01月18日 ⁄ 综合 ⁄ 共 584字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.