lau*_*svr 20 c++ floating-point atomic compare-and-swap stdatomic
我的问题很简单.为什么没有std::atomic<double>
完全实施?我知道它与互锁变量访问有关.但是我真的没有看到,为什么这不应该是双倍的.
它被指定可以使用任何普通的可复制类型.当然,双重是其中之一.所以基本操作应该没问题(设置,阅读等).但是,在整数上可能有一组额外的操作(fetch_add,++,+ =等).
双重与这些类型的差别很小.它是原生的,三维可复制的等等.为什么标准不包括这些类型的双重?
小智 17
std::atomic<double>
支持你可以在程序中创建一个它,它将在C++ 11的规则下工作.您可以使用它执行加载和存储,并进行比较交换等.
该标准规定算术运算(+,*,+ =,&等)仅为"整数类型"的原子提供,因此std::atomic<double>
不会定义任何这些运算.
我的理解是,由于目前在使用的硬件中对浮点类型的fetch-add或任何其他原子算术运算几乎不支持,因此C++标准不为它们提供运算符,因为它们必须低效地实现.
(编辑).std::atomic<double>
顺便说一句,VS2015RC是无锁的.
标准库要求std::atomic<T>
T是任何TriviallyCopyable
类型.既然double
是TriviallyCopyable
,std::atomic<double>
应该编译和工作完美.
如果没有,则表示库有问题.
编辑:自评论澄清问题:
c ++标准规定了基本积分类型的特定特化.(即包含需要在语言中出现的整数的类型).这些专业化对原子的一般情况有进一步的要求,因为它们必须支持:
OR,XOR,AND当然与浮动类型无关,甚至比较也开始变得棘手(因为需要处理epsilon).因此,当没有案例支持需求时,要求图书馆维护者提供特定的专业化似乎是不合理的.
当然,没有什么可以阻止图书馆维护者在不太可能发生的情况下提供这种专业化,即给定的体系结构支持原子排他性或两个双打(它永远不会!).
归档时间: |
|
查看次数: |
10203 次 |
最近记录: |