Heim > Backend-Entwicklung > C++ > Ist std::shared_ptr threadsicher für das Objekt, das es verwaltet?

Ist std::shared_ptr threadsicher für das Objekt, das es verwaltet?

Patricia Arquette
Freigeben: 2024-11-15 13:03:02
Original
332 Leute haben es durchsucht

Is std::shared_ptr thread-safe for the object it manages?

Inwieweit gewährleistet std::shared_ptr Thread-Sicherheit?

Ursprüngliche Fragen:

  1. Referenz Das Zählen in std::shared_ptr ist garantiert threadsicher und Plattformunabhängig.
  2. Nur ​​der Thread, der die letzte Referenz enthält, ruft delete für das freigegebene Objekt auf.
  3. std::shared_ptr bietet keine Thread-Sicherheit für das Objekt, das es speichert.

Antworten:

Ja, die ersten beiden Fragen sind korrekt. Die Referenzzählung und der Destruktoraufruf von std::shared_ptr sind threadsicher.

Die dritte Frage ist ebenfalls richtig. std::shared_ptr garantiert keine Thread-Sicherheit für das darin gespeicherte Objekt. Das Objekt selbst ist möglicherweise nicht threadsicher und daher kann der Zugriff von mehreren Threads ohne ordnungsgemäße Synchronisierung zu undefiniertem Verhalten führen.

Beispiel:

Bedenken Sie Folgendes Stück Pseudocode:

// Thread I
shared_ptr<A> a (new A (1));

// Thread II
shared_ptr<A> b (a);

// Thread III
shared_ptr<A> c (a);

// Thread IV
shared_ptr<A> d (a);

d.reset (new A (10));
Nach dem Login kopieren
  • Frage: Wird reset() aufrufen Thread IV die in Thread I erstellte vorherige Instanz von A löschen und durch eine neue Instanz ersetzen?
  • Antwort: Nein, nur d zeigt auf das neue A(10), während a , b und c verweisen weiterhin auf das ursprüngliche A(1).

Dies liegt daran, dass reset() die Verweise anderer Threads auf dasselbe Objekt nicht beeinflusst. d ist der einzige gemeinsame Zeiger, der auf die neue Instanz zeigt, während die anderen Referenzen (a, b und c) weiterhin auf die ursprüngliche Instanz zeigen.

Das obige ist der detaillierte Inhalt vonIst std::shared_ptr threadsicher für das Objekt, das es verwaltet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage