2009-02-07 19 views

Antwort

14

Sie können es Diskussionen über diese Funktion Umsetzung in boost finden: http://lists.boost.org/Archives/boost/2008/11/144803.php

> Können die N2427 - C++ Atomic Arten und -funktionen

> ohne die Hilfe des Compilers implementiert werden?

Nr

Sie brauchen nicht intrinsics zu sein, wenn Sie Inline-Assembler schreiben kann (oder separat kompilierten Assembler für , die Materie), dann können Sie die Operationen selbst direkt schreiben. Sie können sogar in der Lage sein, einfach C++ zu verwenden (z. B. einfach nur Zuweisung für laden oder speichern). Der Grund, warum Sie benötigen Compiler-Unterstützung verhindert unangemessene Optimierungen: atomare Operationen können nicht optimiert werden, und in der Regel nicht vor oder nach anderen Operationen nachbestellt werden. Dies bedeutet, dass auch nicht-atomare speichert durchgeführt werden, bevor eine atomare Speicher abgeschlossen sein müssen, und kann nicht in einem Register zwischengespeichert werden (zum Beispiel). Auch Lasten, die nach einer atomaren Operation auftreten, können nicht vor der atomaren Operation gehißt werden . Auf einigen Compilern, nur mit Inline-Assembler ist genug. Bei anderen ist das Anrufen einer externen Funktion ausreichend. MSVC bietet _ReadWriteBarrier(), um die Reihenfolge der Compiler bereitzustellen. Andere Compiler benötigen andere Flags.