GCC中的简单可复制类型的原子对象

时间:2016-12-25 21:16:54

标签: c++ c++11 gcc atomic stdatomic

根据C ++标准,std::atomic可以与任何普通的可复制类型结合使用。但是,GCC会生成以下错误消息:

#include <atomic>
struct TriviallyCopyableType {
  int a, b, c, d;
};
int main() {
  std::atomic<TriviallyCopyableType> a;
  a.store({});      // undefined reference to `__atomic_store_16'
  a.is_lock_free(); // undefined reference to `__atomic_is_lock_free'
}

Clang和微软的编译器不抱怨。难道我做错了什么?这是一个已知的问题吗?毕竟,几年前在GCC 4.4中实施了原子操作。除了使用不同的编译器之外,还有其他解决方法吗?由于Clang实现了std::atomic<TriviallyCopyableType>甚至无锁,我不想使用显式锁定。

1 个答案:

答案 0 :(得分:1)

这个答案是根据评论编写的。

您需要通过在命令行上指定-latomic来显式链接原子操作库和您的程序。

-mcx16可以在128位数据类型上启用无锁原子操作。

相关问题