In der Regel versucht die C ++ - Standardbibliothek nur Operationen bereitzustellen, die effizient implementiert werden können. Für std::atomic
bedeutet dies Operationen, die in einer Anweisung oder zwei auf "gemeinsamen" Architekturen blockfrei ausgeführt werden können. "Gemeinsame" Architekturen haben atomare Fetch-and-Add-Anweisungen für Ganzzahlen, aber nicht für Fließkommatypen.
Wenn Sie mathematische Operationen für atomare Gleitkommatypen implementieren möchten, müssen Sie dies selbst mit einer CAS-Schleife (Vergleichen und Tauschen) tun ( Lebe in Coliru ):
%Vor%Tags und Links c++ multithreading stdatomic