首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >喜欢fetch_and_add还是add_and_fetch?

喜欢fetch_and_add还是add_and_fetch?
EN

Stack Overflow用户
提问于 2013-08-02 07:21:17
回答 1查看 702关注 0票数 1

我使用GCC原子结构来增加共享的volatile int。我所要做的就是增加这个值,而且我不关心返回值。为此,我应该选择fetch_and_add还是add_and_fetch?我在文档中没有看到任何东西表明其中一个会比另一个有性能上的好处。真的不重要吗?

或者,由于我实际上不需要原子地读取值,那么是否有更好的方法来增加volatile int,因为我实际上并不读取返回值?

这显然是依赖于体系结构的,所以您可以假设我使用的是x64。我是专门使用AMD Opteron CPU,如果这有区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-02 09:17:30

它取决于硬件,取决于变量的大小、增量值和编译器选项。

要检查它,请将一个小C程序转换为程序集。

代码语言:javascript
复制
volatile int init;
void foo(void) {
    __sync_fetch_and_add(&init,1);
    __sync_add_and_fetch(&init,1);
}

用'gcc -S x.c‘翻译成文件x.s。在x.s中最有趣的是

代码语言:javascript
复制
    lock addl       $1, init(%rip)
    lock addl       $1, init(%rip)

这表明这两个内部代码被转换成相同的汇编程序代码(在Intel x64上)。

您也可以使用-march=native和/或-O3或您最喜欢的选项尝试它,以确定它是否总是相同的.

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

https://stackoverflow.com/questions/18011044

复制
相关文章

相似问题

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