首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InterlockedIncrement对InterlockedIncrementAcquire对InterlockedIncrementNoFence

InterlockedIncrement对InterlockedIncrementAcquire对InterlockedIncrementNoFence
EN

Stack Overflow用户
提问于 2014-08-25 13:47:01
回答 1查看 827关注 0票数 0

有人能解释一下这三种原子操作之间的区别吗?

  • InterlockedIncrement
  • InterlockedIncrementAcquire
  • InterlockedIncrementNoFence

除了我不明白的“使用获取symantecs”之外,我似乎找不到任何关于它们的含义的文档。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-25 14:02:20

离开文件,

InterlockedIncrement“为每个呼叫生成一个全记忆屏障”。内存屏障是对CPU的特殊指令,它阻止CPU像通常那样重新排序操作--例如,负载操作可能非常昂贵,因此如果有一系列操作看起来像"add to A,add to A,load B,add to B",CPU将尝试将其重新排序为"load B,add to A,add to A,add to B“,这样B的负载就有时间在需要之前完成。

然而,这会破坏并行程序中的逻辑,因此有时内存障碍是必要的。它们是昂贵的:它们的成本往往相当于缓存丢失的成本。

如果系统支持InterlockedIncrementAcquire,则尝试使用"获取语义“,如果不支持,则返回到InterlockedIncrement。离开那篇博文,

获取语义,防止按程序顺序对读-获取进行任何读或写操作的内存重新排序。

因此,获取语义是一种有限的、成本较低的内存障碍,只有在某些情况下才有用(显然,只有读取时才有用)。

最后,InterlockedIncrementNoFence不生成内存屏障--它完全不受检查,而且可能会导致顺序一致性问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25487373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档