2015-03-24 13 views

Antwort

10

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); 
+0

Erzeugt atomare volle Speicherbarriere? Operationen auf Zeiger in anderen Threads sind also sicher? Und wie arbeite ich mit shared_ptr? std :: shared_ptr >? und dann was? Wie tausche ich zugrunde liegende Zeiger in shared_ptr aus, wenn es überhaupt möglich ist – kreuzerkrieg

+2

@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). –

+0

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

Verwandte Themen