2017-12-19 35 views
0

を追加します。は、私は2つの値を追加したい原子<double>とダブル

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

正しくこれらの2つの数字を追加する必要がありますか?

+3

'std :: atomic 'はC++ 20まで表示されません。あなたはそれをサポートするコンパイラを持っていますか? @DeiDei; – DeiDei

+0

; http://coliru.stacked-crooked.com/a/24b749dce3f8d705 – user1810087

+0

この回答を見ることができますhttps://stackoverflow.com/questions/23116279/how-to-perform-b​​asic-演算子+型ではない - 型とは無関係 –

答えて

0

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; 
} 
関連する問題