Gemäß der Dokumentation unterstützt eine atomare T, die von einem integralen Typ ist, Aufzählungstyp oder ein Zeigertyp. Unterstützt Intel TBB Floats / Doubles offiziell? Ich habe einige Patches hier und von Raf gesehen Schietekat hier , das möglicherweise in die neueste Version 4.0 integriert wurde . Von den Patches, die ich gelesen habe, war der einzige große Unterschied, den ich bemerkte, das Hinzufügen von reinterpret_cast vom Integer-Typ zu float / double. Wenn jemand das klären könnte, würde ich es begrüßen. Danke!
Sie können problemlos Gleitkommazahlen hinzufügen, die auf 64- und 32-Bit-Ganzzahlen basieren. Atomare Ladung / Speichern / Austausch kann als direkte Wrapper mit reinterpret_cast implementiert werden, die atomaren arithmetischen Operationen können unter Verwendung einer Schleife mit atomischem Vergleichsaustausch implementiert werden.
C ++ 11 unterstützt atomare Floats und Doubles. Arithmetische Funktionen wie std::atomic_fetch_add
werden jedoch nur für ganzzahlige Typen unterstützt.
Wenn Sie einen C ++ 11-Compiler haben, würde ich empfehlen, zu std::atomic
zu wechseln, damit Sie sich nicht auf undokumentiertes Verhalten verlassen müssen.
Der Test für nicht-integrale Typen in test_atomic.cpp wurde im Jahr 2008 hinzugefügt (kurz nach dem Zeitpunkt der Diskussion mit Raf). Daher unterstützt TBB sogar noch früher als der Zeitpunkt der Frage Float- und Doppel-Atomics (obwohl sie nur auf fetch_and_store und compare_and_exchange read-modify-write-Ops beschränkt sind).