Thread-Sicherheit von std::shared_ptr
Die Aussage, die Sie von MSDN bezüglich der Thread-Sicherheit von std::shared_ptr zitiert haben, kann falsch interpretiert werden. Dies impliziert, dass zwar mehrere Threads gleichzeitig verschiedene shared_ptr-Objekte lesen und schreiben können, dies jedoch nicht die Sicherheit der Änderung des shared_ptr-Objekts selbst garantiert.
TL;DR:
Die Thread-Sicherheit von std::shared_ptr betrifft nur die Verwaltung mehrerer Zeiger, die auf dasselbe zugrunde liegende Objekt zeigen. Es erstreckt sich nicht auf den Inhalt des gemeinsam genutzten Objekts oder auf gleichzeitige Schreibvorgänge in der shared_ptr-Instanz.
Aufschlüsselung:
Ein shared_ptr besteht intern aus zwei Komponenten:
Beispiel:
In Ihrem Codeausschnitt ist global ein gemeinsamer Zeiger auf ein Konfigurationsobjekt. Thread 1 kopiert global in seinen eigenen gemeinsamen Zeiger, privat. Wenn Thread 2 anschließend „global“ ändern würde, würde „private“ immer noch auf das ursprüngliche Konfigurationsobjekt verweisen, da der Steuerblock nicht geändert wird. Wenn Thread 2 jedoch ein neues Konfigurationsobjekt global zuweist, würde privat weiterhin auf das ursprüngliche Objekt verweisen.
Thread-Sicherheit von spitzen Objekten:
Die Fähigkeit, sicher zu sein Das Ändern des Objekts, auf das verwiesen wird, über mehrere Threads hängt von der Implementierung des Objekts ab. Im Fall Ihrer Konfigurationsklasse wäre der Code nicht threadsicher, wenn sie gleichzeitige Schreibvorgänge ohne Synchronisierung zulässt, z. B. das Hinzufügen oder Entfernen von Einstellungen.
Lösung:
Um die Thread-Sicherheit für Objektänderungen zu gewährleisten, verwenden Sie Synchronisierungsmechanismen wie std::mutex, um den Zugriff auf das shared_ptr-Objekt oder das gemeinsam genutzte Objekt selbst zu schützen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3