C++11支持原子浮点数和双精度浮点数。像std::atomic_fetch_add
这样的算术函数仅支持整数类型。
如果您使用的是C++11编译器,我建议您切换到std::atomic
,这样您就不必依赖于未记录的行为。
您可以轻松地在64位和32位原子整数的基础上添加浮点数支持。原子加载/存储/交换可以使用reinterpret_cast直接包装实现,原子算术操作可以使用带有原子比较交换的循环实现。
test_atomic.cpp 中非整数类型的测试是在2008年添加的(就在与Raf讨论的时间之后不久)。因此,即使在问题提出的时间之前,TBB也支持float&double原子操作(但仅限于fetch_and_store和compare_and_exchange读取-修改-写入操作)。
std::atomic
轻松高效地模拟。 - Cory Nelson