std::atomic von std::shared_ptr kennt get() nicht
-
Hallo!
Wie der Titel verrät, versuche ich einen std::shared_ptr atomic zu machen, damit dieser std::shared_ptr thread safe ist:
std::atomic<std::shared_ptr<uint32_t>> num = std::make_shared<uint32_t>();
Das funktioniert auch fehlerfrei. Die Frage ist nur... ist das richtig? Und warum kennt die Variable
num
nicht die methode
get()
? Scheinbar ist es nicht richtig
-
std::atomic hat keine methode get. Du musst fetch und store bemühen, um das std::shared_ptr - Objekt zu ändern.
-
Danke, load() und store() sind genau die Methoden, die ich suche
-
Wie kann man die Funktionsweise von
std::atomic<>
mit Pointern überhaupt vorstellen? Wenn ichload()
aufrufe gibt der mir ne Kopie seines Wertes zurück aber bei Pointern operiert man da doch am gleichen Objekt? Verbirgt sich da Magie bei load() und store()?
-
http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic
Das ist eher das was du suchst.
Und klar, du hast dadurch einen thread safe pointer aber kein thread safe objekt oder value. Ist demnach eher nicht das gelbe vom ei.
Warum nicht einfach einenstd::atomic<std::uint32_t>
?