首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >__atomic_test_and_set对__atomic_compare_exchange_n

__atomic_test_and_set对__atomic_compare_exchange_n
EN

Stack Overflow用户
提问于 2016-08-03 12:30:18
回答 1查看 4.7K关注 0票数 2

我想我可以用__atomic_compare_exchange_n代替__atomic_test_and_set

在布尔值中使用这些内置程序有任何性能上的好处吗?

除参数数外的任何输入都将受到赞赏。

EN

回答 1

Stack Overflow用户

发布于 2016-08-03 14:16:40

最好使用C11的<stdatomic.h>提供的API。__atomic内置器正是GCC在幕后实现它们的方式,使用标准API使您的代码更易于移植。

  • __atomic_test_and_set就是GCC把atomic_flag_test_and_set翻译成的。
  • __atomic_compare_exchange_natomic_compare_exchange

gcc6 on AMD64和-O2编译

代码语言:javascript
复制
if (atomic_flag_test_and_set(&atomic_flag_var) == 0) {
    printf("Hello World\n");
}

if (atomic_compare_exchange_strong(&atomic_var, &clear, 1)) {
    printf("Hello World\n");
}

在第一种情况下,转到xchg,然后是test。另一个期待着一个cmpxchg。这是不太可能的,你将经历任何明显的差异,两者之间。看这个答案:x86上交换锁与比较锁和交换锁的相对性能

那么,用哪一种呢?如果需要原子标志,请使用atomic_flag。标准保证这将是无锁的。其他任何_Atomic类型都不存在这样的保证。

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

https://stackoverflow.com/questions/38743734

复制
相关文章

相似问题

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