Rumah >pembangunan bahagian belakang >C++ >Adakah std::shared_ptr Thread-Safe Apabila Mengubah Suai Objek Dikongsi?

Adakah std::shared_ptr Thread-Safe Apabila Mengubah Suai Objek Dikongsi?

Patricia Arquette
Patricia Arquetteasal
2024-11-09 22:55:02251semak imbas

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

Memahami std::shared_ptr Keselamatan Benang

Dokumentasi merujuk kepada keselamatan benang blok kawalan, yang menguruskan pemilikan bersama objek. Berbilang urutan boleh mengakses objek shared_ptr yang berbeza secara serentak, kerana mereka berkongsi pemilikan sumber asas tanpa konflik. Walau bagaimanapun, ini tidak menjamin keselamatan mengubah suai objek kongsi itu sendiri.

Shared_ptr dan Pengubahsuaian Objek

Dalam contoh kod anda, urutan 1 mencipta salinan peribadi global menggunakan shared_ptr, manakala thread 2 mengubah suai global itu sendiri. Perkara berikut menerangkan tingkah laku:

  • Peribadi benang 1 pada mulanya ditetapkan kepada nilai asal global.
  • Apabila urutan 2 mengubah suai global, ia tidak menjejaskan penuding peribadi, sebagai titik persendirian ke blok kawalan yang berbeza.
  • Walau bagaimanapun, peribadi akhirnya akan dimusnahkan, mengurangkan kiraan rujukan dalam blok kawalan yang telah diubah suai oleh urutan 2.
  • Walaupun peribadi akan kekal sebagai shared_ptr yang sah, ia seumur hidup adalah bebas daripada global yang diubah suai.

Pertimbangan Keselamatan Benang

Untuk mengubah suai dengan selamat objek yang dikongsi oleh berbilang rangkaian, anda mesti menggunakan mekanisme penyegerakan seperti std::mutex. Contoh berikut menunjukkan kemas kini konfigurasi selamat benang menggunakan 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
}

Dengan memperoleh mutex sebelum mengubah suai global_config, anda menghalang sebarang gangguan daripada urutan lain. Ini memastikan konfigurasi sentiasa dikemas kini dengan cara yang konsisten dan selamat untuk rangkaian.

Atas ialah kandungan terperinci Adakah std::shared_ptr Thread-Safe Apabila Mengubah Suai Objek Dikongsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn