根据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>
甚至无锁,我不想使用显式锁定。
答案 0 :(得分:1)
这个答案是根据评论编写的。
您需要通过在命令行上指定-latomic
来显式链接原子操作库和您的程序。
-mcx16
可以在128位数据类型上启用无锁原子操作。