海湾合作委员会中易于复制类型的原子对象
Atomic objects of trivially copyable types in GCC
根据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位数据类型启用无锁的原子操作。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- C++ 多态模板类,模板类型对象的实例化
- 如何分配适合容纳 T 类型对象的缓冲区(可能过度对齐、可能有运算符 new 等)
- 如何构造一个 std::variant 类型对象,其自身 Templated 和构造函数转发参数
- C++:初始化指向具有不同类型对象的指针数组
- 在类 C++ 中构造的模板类型对象
- 如何将颁发者名称设置为x509_req类型对象
- 将任何数据类型/对象作为参数传递以确定其大小
- 将引用类型对象的数组从C#封送到C++
- <T> 从类型对象创建类型<T1>对象的构造函数
- C++是否有现有的方法来检查对象是否是派生类型对象
- C 模板:创建与现有对象相同的类型对象
- 链接列表中的虚函数 - 多种返回类型(对象)
- 没有适当操作员()的类型对象的呼叫
- 制作垫子类型对象的数组.输出窗口显示同一帧
- 抽象类型对象的分配
- 在std::list中就地创建自定义类型对象
- 接受泛型列表类型对象的参数
- C++-将模板类型对象强制转换为特定的数据类型
- 试图在C++中打印存储在类型对象数组中的信息