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
948 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!

sumber:php.cn
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