Suchen Sie nach tragbaren, einfachen und eleganten Ersatz für Win32 InterlockedExchangePointer. Idealerweise nur mit C++ 11, aber Boost funktioniert auch.Gibt es blank C++ 11 (oder Boost) Ersatz für InterlockedExchangePointer?
Antwort
Die standard atomic types haben eine atomare exchange
Funktion. So ist die Microsoftese
PVOID volatile target;
old_value = InterlockedExchangePointer(&target, new_value);
würde
std::atomic<T*> target;
old_value = target.exchange(new_value);
Erzeugt atomare volle Speicherbarriere? Operationen auf Zeiger in anderen Threads sind also sicher? Und wie arbeite ich mit shared_ptr? std :: shared_ptr
@kreuzkrieg: Eine Frage pro Frage bitte. Standardmäßig gibt es eine vollständige Speicherschranke, aber Sie können andere Speicherreihenfolgen in einem zweiten Parameter angeben. Gemeinsame Zeiger stellen keine atomare Austauschoperation bereit, Sie müssten etwas anderes tun (entweder mit einem separaten atomaren Rohzeiger oder einem Mutex). –
schau was ich gefunden habe http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic sieht aus wie es atomaren Austausch für geteilte Zeiger gibt – kreuzerkrieg
- 1. boost :: any typeid Optimierung für C++ 11
- 2. Gibt es einen Ersatz für unistd.h für Windows (Visual C)?
- 3. boost :: thread_group in C++ 11?
- 4. Zufallszahlen, C++ 11 vs Boost
- 5. Gibt es einen offiziellen Ersatz für CodeDom?
- 6. C++ 11 Platzhalter mit Boost
- 7. Gibt es einen Ersatz für Transact-SQL
- 8. Boost read_json und C++ 11
- 9. Gibt es einen Ersatz für MDTPtools?
- 10. Boost-Fusion Warum gibt es unterschiedliche Ergebnisse in C++ 11 und C++ 03?
- 11. Gibt es einen Ersatz für Paste.Template?
- 12. Gibt es Ersatz für Katze unter Windows
- 13. Gibt es eine C++ 11 CSPRNG?
- 14. C++ 11 std :: shared_ptr + boost :: serialisierung
- 15. Gibt es eine Entsprechung zu boost :: interprocess :: null_mutex in C++ 11 (z. B. std :: null_mutex)?
- 16. C++ 11-std-Äquivalent von Boost has_dereference
- 17. C++ Windows-Thread-Pool (Nicht-Boost/C++ 11)
- 18. Boost-Transformations-Iterator und C++ 11 Lambda
- 19. Ersatz für DROP ODER ERSTELLEN in MySql
- 20. Gibt es einen Ersatz für Arrays mit Enums als Indizes?
- 21. Gibt es einen boost :: weak_intrusive_pointer?
- 22. Warum gibt es keine `static_if` in C++ 11
- 23. Ersatz für Nachkommen oder selbst
- 24. Gibt es einen Django 1.7+ Ersatz für Souths add_introspection_rules()?
- 25. Gibt es ein neues Funktionstyp-Ausdrucksformat in C++ 11?
- 26. Gibt es gute C- oder C++ - Bibliotheken für große Punktwolken?
- 27. Unterschied zwischen C++ 11 Std :: Bind und Boost :: Bind
- 28. Wie erstellt man einen shared_lock oder upgrade_lock in C++ 11?
- 29. Regular Expression für Dezimal oder Blank
- 30. Gibt es eine Möglichkeit, einen Rückgabewert in C++ 11 abzugleichen?
[std :: Atom] (http://en.cppreference.com/w/cpp/atomic/atomic) Austausch Funktionalität bietet, aber das nur funktioniert, wenn Sie den Typ Ihrer Variablen in 'std :: atomic' ändern können –
melak47