Ich weiß, dass ähnliche Vorlage in Intels TBB, abgesehen davon, dass ich keine Implementierung in Google oder in Boost-Bibliothek finden kann.C++ 0x atomische Template-Implementierung
Antwort
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.
- 1. C++ 0x Initialisierungsliste Beispiel
- 2. C++ 0x threading
- 3. Vorlage typedef C++ 0x
- 4. Bibliothekspläne für C++ 0x?
- 5. asynchrone Funktionsaufruf C++ 0x
- 6. C++ 0x: Speicherordnungs
- 7. C++ 0x "Standard-Layout"
- 8. C++ 0x Lambda-Overhead
- 9. C++ 0x regex in GCC
- 10. C++ 0x: Bereichsüberlastungen für Standardalgorithmen?
- 11. stark typisierte C++ 0x Enumerationsvergleich
- 12. Informationen zu C++ 0x-Funktionen
- 13. Unicode-Unterstützung in C++ 0x
- 14. C++ 0x Vorlage Funktion Objektschluss
- 15. Übergang zu C++ 0x von C++ 98
- 16. Threads in C, C++, C++ 0x, Pthread und steigern
- 17. Frage zum C++ 0x Referenz Zusammenbruch
- 18. hinzufügen C++ 0x Unterstützung in cmake
- 19. Minimale iOS-Version, die C++ 0x unterstützt
- 20. Lambda-Traits Inkonsistenz über C++ 0x Compiler
- 21. Umgebung Zugriffsbezeichner mit C++ 0x decltype
- 22. Was muss ich über C++ 0x wissen?
- 23. Thread Destruktoren in C++ 0x vs Boost
- 24. g ++ und C++ 0x Spezifikation Unterstützung
- 25. fügen sie copy_if zu C++ 0x hinzu?
- 26. Einheitliche Initialisierung in C++ 0x, wann() statt {}?
- 27. C++ 0x: Überlastung bei Lambda Arity
- 28. g ++ C++ 0x Enum Klasse Compiler-Warnungen
- 29. C++ 0x Optimierung der Compiler-Qualität
- 30. Wie Boost mit C++ 0x Unterstützung erstellen?