Hier (und in ein paar SO-Fragen) sehe ich, dass C++ so etwas wie lock-free nicht unterstützt std::atomic<double>
und kann so etwas wie einen atomaren AVX/SSE-Vektor noch nicht unterstützen, da er CPU-abhängig ist (obwohl heutzutage von CPUs, die ich kenne, ARM, AArch64 und x86_64 Vektoren haben).
Aber gibt es Unterstützung auf Assembly-Ebene für atomare Operationen? double
s oder Vektoren in x86_64? Wenn ja, welche Operationen werden unterstützt (wie Laden, Speichern, Addieren, Subtrahieren, Multiplizieren vielleicht)? In welchen Operationen implementiert MSVC++ 2017 lock-free? atomic<double>
?
atomic<double>
ist lock-free auf meiner Plattform (GCC, x86-64) und wahrscheinlich auch auf MSVC++. Ich verstehe nicht, warum Sie denken, dass Ihr Link etwas anderes zeigt. Aber,std::atomic
bietet nur arithmetische Operationen auf Integer-Typen, also mitatomic<double>
Sie können nur grundlegende Operationen wie Laden/Speichern/Austauschen ausführen.– zwischenjay
12. Juli 2017 um 10:57 Uhr
@interjay , bei diesem Link gibt es keine Konstante für
double
wieATOMIC_POINTER_LOCK_FREE
,ATOMIC_LLONG_LOCK_FREE
etc.– Serge Rogatch
12. Juli 2017 um 11:12 Uhr
Es gibt keine Konstante, aber
std::atomic<double>().is_lock_free()
kann (und tut) immer noch zurückkehrentrue
.– zwischenjay
12. Juli 2017 um 11:18 Uhr