Heim >Backend-Entwicklung >C++ >Ist std::shared_ptr threadsicher, wenn gemeinsam genutzte Objekte geändert werden?

Ist std::shared_ptr threadsicher, wenn gemeinsam genutzte Objekte geändert werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 22:55:02285Durchsuche

Is std::shared_ptr Thread-Safe When Modifying Shared Objects?

Std::shared_ptr Thread-Sicherheit verstehen

Die Dokumentation bezieht sich auf die Thread-Sicherheit des Steuerblocks, der verwaltet den gemeinsamen Besitz des Objekts. Mehrere Threads können gleichzeitig auf verschiedene shared_ptr-Objekte zugreifen, da sie ohne Konflikte den Besitz der zugrunde liegenden Ressource teilen. Dies garantiert jedoch nicht die Sicherheit der Änderung des gemeinsam genutzten Objekts selbst.

Shared_ptr- und Objektänderungen

In Ihrem Codebeispiel erstellt Thread 1 eine private Kopie von global unter Verwendung von shared_ptr, während Thread 2 sich global selbst ändert. Im Folgenden wird das Verhalten erklärt:

  • Private von Thread 1 wird zunächst auf den ursprünglichen Wert von global gesetzt.
  • Wenn Thread 2 global ändert, wirkt sich dies nicht auf den privaten Zeiger aus, da private Punkte vorhanden sind zu einem anderen Kontrollblock.
  • Private wird jedoch irgendwann zerstört, wodurch der Referenzzähler im Kontrollblock, der vom Thread geändert wurde, verringert wird 2.
  • Private bleibt zwar ein gültiger shared_ptr, seine Lebensdauer ist jedoch unabhängig vom geänderten globalen.

Thread-Sicherheitsüberlegungen

An Um ein von mehreren Threads gemeinsam genutztes Objekt sicher zu ändern, müssen Sie einen Synchronisierungsmechanismus wie std::mutex verwenden. Das folgende Beispiel zeigt eine Thread-sichere Konfigurationsaktualisierung mithilfe eines Mutex:

// Shared pointer to the configuration object
std::shared_ptr<Configuration> global_config = make_shared<Configuration>();

// Mutex to protect the configuration object
std::mutex config_mutex;

void thread_fcn() {
    // Lock the mutex before accessing the configuration
    std::lock_guard<std::mutex> lock(config_mutex);

    // Update the configuration from global_config
    // ...

    // Unlock the mutex after finishing the update
}

Indem Sie den Mutex vor dem Ändern von global_config erwerben, verhindern Sie jegliche Störungen durch andere Threads. Dadurch wird sichergestellt, dass die Konfiguration immer konsistent und threadsicher aktualisiert wird.

Das obige ist der detaillierte Inhalt vonIst std::shared_ptr threadsicher, wenn gemeinsam genutzte Objekte geändert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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