C ++ 0x Atom-Vorlage Implementierung
-
22-08-2019 - |
Frage
Ich weiß, dass ähnliche Vorlage Exits in Intel TBB, außer, dass ich keine Umsetzung auf Google oder in Boost-Bibliothek finden kann.
Lösung
Sie können es Diskussionen über diese Funktion Umsetzung in boost finden: http: //lists.boost.org/Archives/boost/2008/11/144803.php
> Kann der N2427 - C ++ Atomic Arten und -funktionen implementiert werden
> ohne die Hilfe des Compilers?
Nein.
Sie müssen nicht intrinsics sein, wenn Sie Inline-Assembler schreiben kann (oder separat kompilierten Assembler für dass die Materie), dann können Sie den Schreib Operationen direkt selbst. Sie vielleicht sogar in der Lage sein, einfache C ++ (Beispielsweise einfach nur Zuordnung für die Last oder zu speichern). Der Grund, warum Sie brauchen Compiler-Unterstützung verhindert unangemessene Optimierungen: atomic Operationen können nicht optimiert werden, und Regel muss nicht mehr nachbestellt vor oder nach einer anderen Operation. Dies bedeutet, dass auch Nicht-Atom Geschäfte vor einem Atomdurchgeführt Speicher haben vollständig zu sein, und kann nicht in einem Register zwischengespeichert wird (zum Beispiel). Auch Belastungen, die auftreten, nachdem ein Atom-Operation kann nicht hochgezogen werden, vor dem Atom op. auf einigen Compiler, nur Inline-Assembler reicht. Auf anderen ruft ein externe Funktion ist genug. MSVC bietet _ReadWriteBarrier () die Compiler Bestellung zu liefern. andere Compiler müssen andere Flaggen.