如果其他处理器在任何后续操作的效果之前始终看到其效果,则操作具有 获取语义 。 如果其他处理器在操作本身的效果之前看到前一个操作的效果,则操作具有 释放语义 。
请考虑以下代码示例:
 a++;
 b++;
 c++;
从另一个处理器的角度来看,上述操作可能以任何顺序出现。 例如,另一个处理器可能会在 递增 b 之前看到 的 a增量。
默认情况下,原子操作(例如 InterlockedXxx 例程执行的那些操作)具有获取和释放语义。 但是,基于 Itanium 的处理器执行的操作仅获取或仅释放语义的速度比具有两者的操作要快。 因此,系统提供一些 InterlockedXxx 例程的 InterlockedXxx Acquire 和 Interlocked XxxRelease 版本。
例如, InterlockedIncrementAcquire 例程使用 acquire 语义来递增变量。 如果改写前面的代码示例,如下所示:
 InterlockedIncrementAcquire(&a);
 b++;
 c++;
其他处理器始终会在 和 c的增量a之前看到 的b增量。
同样, InterlockedIncrementRelease 例程使用发布语义来递增变量。 如果再次重写代码示例,如下所示:
 a++;
 b++;
 InterlockedIncrementRelease(&c);
其他处理器将始终看到 和 的增量a,然后再递增c。b
如果处理器不提供仅具有获取或仅发布语义的指令,则系统将使用提供这两种类型的语义的相应例程。 例如,在 x86 处理器上 ,InterlockedIncrementAcquire 和 InterlockedIncrementRelease 等效于 InterlockedIncrement。
下表列出了具有仅获取和仅发布变体的例程。
| 互锁Xxx 例程 | 仅获取语义版本 | 仅发布语义版本 | 
|---|---|---|