Rumah > pembangunan bahagian belakang > C++ > Adakah Mengubah suai `std::shared_ptr` Object Thread-Selamat?

Adakah Mengubah suai `std::shared_ptr` Object Thread-Selamat?

Patricia Arquette
Lepaskan: 2024-11-19 17:52:03
asal
972 orang telah melayarinya

Is Modifying a `std::shared_ptr` Object Thread-Safe?

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>();
...
Salin selepas log masuk

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!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan