Rumah > Artikel > pembangunan bahagian belakang > Adakah Mengubah suai `std::shared_ptr` Object Thread-Selamat?
std::shared_ptr Thread Safety
Dokumentasi menyatakan bahawa berbilang rangkaian selamat boleh membaca dan menulis objek std::shared_ptr yang berbeza, walaupun apabila mereka mewakili salinan dengan pemilikan bersama. Walau bagaimanapun, ini tidak membayangkan bahawa mengubah suai objek shared_ptr sememangnya selamat.
Untuk menjelaskannya, jaminan keselamatan benang bagi std::shared_ptr diperluaskan semata-mata kepada pengurusan blok kawalan yang menjejaki pemilikan dikongsi antara berbilang kejadian shared_ptr. Kandungan shared_ptr, termasuk objek yang ditunjukkannya, sememangnya tidak selamat untuk thread.
Sebagai contoh, kod yang anda nyatakan mungkin tidak berkelakuan seperti yang diharapkan:
shared_ptr<myClass> global = make_shared<myClass>(); ... // In thread 1 shared_ptr<myClass> private = global; ... // In thread 2 global = make_shared<myClass>(); ...
Dalam ini senario, ia tidak dijamin bahawa peribadi urutan 1 akan mengekalkan nilai asal atau nilai global yang dikemas kini. Ini kerana mengubah suai nilai global dalam utas 2 tidak selamat untuk rangkaian dan boleh membawa kepada gelagat yang tidak ditentukan.
Untuk memastikan kesahihan kejadian shared_ptr yang diakses oleh berbilang rangkaian, adalah perlu untuk menggunakan mekanisme penyegerakan, seperti std ::mutex, untuk melindungi bahagian kritikal kod. Adalah penting untuk menganggap kandungan objek shared_ptr sebagai bukan-benang-selamat dan melindungi akses serentak kepada sumber yang dikongsi menggunakan teknik penyegerakan yang sesuai.
Atas ialah kandungan terperinci Adakah Mengubah suai `std::shared_ptr` Object Thread-Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!