【发布时间】:2013-06-06 15:23:47
【问题描述】:
在他的Blog Herb Sutter 中写道
[...] 因为增加智能指针引用计数 通常可以优化为与普通增量相同 在优化的
shared_ptr实现中——只是一个普通的增量指令, 并且在生成的代码中没有围栏。但是,减量必须是原子减量或等价物, 它会生成特殊的处理器内存指令,这些指令在 他们自己,最重要的是诱导记忆 优化周边代码的栅栏限制。
本文是关于shared_ptr 的实现,我不确定他的评论是否仅适用于此或一般情况下。根据他的表述,我认为它是一般。
但是当我想到它时,我只能在if(counter==0) 紧随其后时想到“更昂贵的减量”——shared_ptr 可能就是这种情况。
因此我想知道 atomic 操作 ++counter 是否(通常)总是比 --counter 快,或者只是因为它是使用if(--counter==0)... 和shared_ptr?
【问题讨论】:
-
“从他的表述来看,我认为它通常是” - 我认为相反。
-
您可能还想查看 --counter == 0 所需的 WriteRead 屏障,它通常是最昂贵的屏障,也是唯一需要在写入数据后,必须重新读取它以保证内核之间的同步。对于 counter++,您只需编写即可,无需立即获取此值或其他数据的同步状态。
标签: c++ performance atomic reference-counting memory-fences