海湾合作委员会中易于复制类型的原子对象

Atomic objects of trivially copyable types in GCC

本文关键字:类型 对象 复制 易于 委员会      更新时间:2023-10-16

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

此答案是从评论中编译的。

您需要通过在命令行上指定-latomic来明确将原子操作库与您的程序链接。

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