【问题标题】:Does exchange or compare_and_exchange reads last value in modification order?exchange 或 compare_and_exchange 是否按修改顺序读取最后一个值?
【发布时间】:2013-02-10 05:49:49
【问题描述】:

我正在阅读 Anthony Williams 的 C++ Concurrency in Action。 在“了解轻松排序”部分,它有:

你可以告诉隔间里的人一些额外的事情,例如“写下这个数字,并告诉我列表底部是什么”(交换)和“写下 如果列表底部的数字就是这个数字;否则告诉我我是什么 应该已经猜到了”(compare_exchange_strong),但这并不影响一般 原则。

这是否意味着此类操作总是按修改顺序读取最后一个值(如果在约束之前没有发生额外的线程间)? IE。是否有一些缓存更新/等(即使在宽松的排序中)?

【问题讨论】:

  • 读取最后一个值”最后与什么比较?

标签: c++ c++11 atomic lock-free memory-model


【解决方案1】:

是的。 C++ 标准说 (29.3/10):

原子读-修改-写操作应始终读取最后一个值 (按修改顺序)写在与相关的写之前 读-修改-写操作。

exchange 和成功的compare_exchange_{weak,strong} 操作都是读-修改-写操作。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2021-11-07
    • 2017-04-15
    • 2020-01-03
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2016-07-09
    • 2018-07-28
    相关资源
    最近更新 更多