4

我看不出有任何理由为“本机”CPU 积分增加额外开销,但我可能错了,所以我想听听社区的意见

我真正的问题涉及某种相对罕见的变化但经常阅读的链表(类似于典型的 RCU 用例)。这个想法是为只读操作提供两种访问模式:如果结构现在正在改变(完全成熟的无锁算法),则使用第一种模式,第二种轻量级模式用于“平静”情况(使用非原子列表遍历)。对于第二种(轻量级)情况,我将使用带有 memory_order_relaxed 的原子负载,但如果它太昂贵,我需要做一些解决方法(缓存非原子变量中的原子值,或以某种方式模拟建议的 memory_order_nonatomic http ://www.open-std.org/jtc1/sc22/wg14/www/docs/n1446.htm等)

我知道答案取决于原子实现(和 CPU),但我希望实现应该合理:)

4

1 回答 1

5

memory_order_relaxed模型只允许存储/加载操作重新排序,但它仍然强制执行原子读/写。在某些 CPU 架构上,它会导致总线锁定、缓存刷新等。所以通常答案是肯定的 - 原子访问memory_order_relaxed应该被认为比非原子访问更昂贵。

于 2012-09-07T09:15:52.203 回答