Ursprüngliche Fragen:
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));
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!