我想添加两个值:
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’)
我应该如何正确添加这两个数字?
答案 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;
}