首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“获取”和“消耗”内存顺序有何不同,什么时候“消耗”更可取?

“获取”和“消耗”内存顺序有何不同,什么时候“消耗”更可取?
EN

Stack Overflow用户
提问于 2013-10-27 01:54:48
回答 3查看 5.3K关注 0票数 64

C++11标准定义了一个内存模型(1.7,1.10),其中包含内存排序,大致为“顺序一致”、“获取”、“消耗”、“释放”和“松弛”。同样粗略地说,一个程序只有在没有竞争的情况下才是正确的,这发生在所有动作都可以按某种顺序排列,其中一个动作发生在另一个动作之前。动作X在动作Y之前发生的方式是X在Y之前排序(在一个线程内),或者X线程间发生在Y之前。

  • X与Y同步,或者
  • X在Y之前按依赖关系排序。

当X是原子存储,在某个原子变量上具有"release“排序,而Y是在同一变量上具有"acquire”排序的原子加载时,同步- with就会发生。在类似的情况下,Y被加载“消费”排序(和适当的内存访问)时,就会发生依赖排序。synchronizes-with的概念在线程内跨被排序的操作之间传递地扩展了发生之前的关系,但之前是按依赖关系排序的,只能通过称为进位之前的排序依赖关系的严格子集进行传递扩展,该依赖关系遵循一组较大的规则,特别是可以用std::kill_dependency中断。

那么,“依赖排序”这个概念的目的是什么呢?与更简单的排序前/同步排序相比,它提供了什么优势?由于它的规则更严格,我假设它可以更有效地实现。

你能举一个程序的例子,从发布/获取切换到发布/消费既是正确的,又提供了不平凡的优势吗?std::kill_dependency什么时候能提供改进呢?高级参数会很好,但对于特定于硬件的差异会有加分。

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

https://stackoverflow.com/questions/19609964

复制
相关文章

相似问题

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