Keselamatan Benang std::shared_ptr
Pernyataan yang anda petik daripada MSDN mengenai keselamatan rangkaian std::shared_ptr boleh disalahtafsirkan. Ini menunjukkan bahawa walaupun berbilang urutan boleh membaca dan menulis objek shared_ptr yang berbeza secara serentak, ini tidak menjamin keselamatan mengubah suai objek shared_ptr itu sendiri.
TL;DR:
Keselamatan urutan std::shared_ptr hanya berkaitan dengan pengurusan berbilang penunjuk yang menunjuk ke objek asas yang sama. Ia tidak dilanjutkan ke kandungan objek kongsi atau penulisan serentak kepada contoh shared_ptr.
Pecahan:
Ptr_kongsi secara dalaman terdiri daripada dua komponen:
Contoh:
Dalam coretan kod anda, global ialah penuding dikongsi kepada objek konfigurasi. Thread 1 salinan global ke dalam penuding dikongsi sendiri, peribadi. Jika Thread 2 kemudiannya mengubah suai global, peribadi masih akan menunjuk ke objek konfigurasi asal, kerana blok kawalan tidak diubah suai. Walau bagaimanapun, jika Thread 2 memperuntukkan objek konfigurasi baharu kepada global, private akan kekal menunjuk ke objek asal.
Keselamatan Benang Objek Runcing:
Keupayaan untuk selamat ubah suai objek runcing melalui berbilang benang bergantung pada pelaksanaan objek. Dalam kes kelas konfigurasi anda, jika ia membenarkan penulisan serentak tanpa penyegerakan, seperti menambah atau mengalih keluar tetapan, kod tersebut tidak akan selamat untuk benang.
Penyelesaian:
Untuk memastikan keselamatan benang bagi pengubahsuaian objek, gunakan mekanisme penyegerakan seperti std::mutex untuk menjaga akses kepada objek shared_ptr atau objek kongsi itu sendiri.
Atas ialah kandungan terperinci Adakah std::shared_ptr benar-benar selamat untuk benang, dan bagaimana pula dengan pengubahsuaian serentak pada objek runcing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!