添加原子<double>和double

时间:2017-12-19 11:35:26

标签: c++ double atomic

我想添加两个值:

auto size = new std::atomic<double>(0);
double packet_size = 64e3;
*size += packet_size;

但我收到了一个错误。

no match for ‘operator+=’ (operand types are ‘std::atomic<double>’ and ‘double’)

我应该如何正确添加这两个数字?

1 个答案:

答案 0 :(得分:1)

即使你很难创建atomic<float>atomic<double>,也没有为浮点原子定义原子运算符。这是因为没有用于原子添加浮点值的x86(也不是ARM)汇编指令。

解决方法是使用compare_exchange操作来增加/更改原子变量。

#include <atomic>

int main()
{
    std::atomic<int> i{};
    i += 3;

    std::atomic<double> f{};
    for (double g = f; !f.compare_exchange_strong(g, g + 1.0);)
      ;
    return 0;
}