我的问题很简单。为什么没有std::atomic<double>
完全实施?我知道这与原子 RMW(读-修改-写)访问有关。但我真的不明白,为什么在double
.
它指定可以使用任何可简单复制的类型。当然double
是其中之一。因此,C++11 需要可用于任何类类型的基本操作(加载、存储、CAS、交换等)。
但是,对于整数,可以进行一组额外的操作(fetch_add
、++
、+=
等)。
Adouble
与这些类型几乎没有区别。它是本机的、可简单复制的等。为什么标准不包含double
这些类型?
更新:C++20 确实专注std::atomic<T>
于浮点类型,带有 fetch_add 和 sub。 C++20 std::atomic<float>- std::atomic<double>.specializations 但不是原子绝对值 (AND) 或否定 (XOR)。
编者注:如果没有 C++20,您可以将自己的代码从 CAS 中推出;有关可移植示例,请参阅x86_64 上的原子双浮点或 SSE/AVX 向量加载/存储;atomic<double>
和 float 在大多数 C++ 实现中是无锁的。