添加原子 并加倍

问题描述 投票:2回答:1

我想添加两个值:

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’)

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

c++ double atomic
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.