InterlockedIncrement vs InterlockedIncrementAcquire vs InterlockedIncrementNoFence

有人能解释这三个primefaces操作之间的区别吗?

  • InterlockedIncrement
  • InterlockedIncrementAcquire
  • InterlockedIncrementNoFence

我似乎无法find任何文件,除了“使用获取symantecs”,而我不明白的意思。

谢谢。

去掉文档,

InterlockedIncrement “为每个呼叫生成一个完整的内存屏障 ”。 内存屏障是CPU的特殊指令,可以防止它像通常那样对操作进行重新排序 – 例如,加载操作可能非常昂贵,所以给定一个操作流,看起来像“添加到A,添加到A,加载B ,加到B“,CPU会尝试重新排序为”加载B,添加到A,添加到A,添加到B“,这样在需要的时候B的负载就有时间完成了。

但是,这可能会破坏并行程序中的逻辑,因此有时需要内存屏障。 它们很昂贵:它们往往成本高达缓存未命中。

InterlockedIncrementAcquire尝试使用“ 获取语​​义 ”(如果系统支持),如果不支持,则返回到InterlockedIncrement。 从那篇博客文章中,

获取语​​义防止了读取获取的存储器重新排序,其中任何读取或写入操作遵循程序顺序

所以获取语义是一种有限的,不太昂贵的记忆障碍,仅在某些情况下才有用(当只涉及读取时,显然)。

最后, InterlockedIncrementNoFence不会产生内存障碍 – 它是完全不受检查的,并且可能会导致顺序一致性问题。