Soalan Asal:
Jawapan:
Ya, dua soalan pertama adalah tepat. std::shared_ptr's reference counting and destructor invocation adalah thread-safe.
Soalan ketiga juga betul. std::shared_ptr tidak menjamin keselamatan benang untuk objek yang disimpan di dalamnya. Objek itu sendiri mungkin tidak selamat untuk benang, dan oleh itu, mengaksesnya daripada berbilang rangkaian tanpa penyegerakan yang betul boleh membawa kepada gelagat yang tidak ditentukan.
Contoh:
Pertimbangkan perkara berikut sekeping pseudokod:
// Thread I shared_ptr<A> a (new A (1)); // Thread II shared_ptr<A> b (a); // Thread III shared_ptr<A> c (a); // Thread IV shared_ptr<A> d (a); d.reset (new A (10));
Ini kerana reset() tidak menjejaskan rujukan benang lain kepada objek yang sama. d ialah satu-satunya penuding kongsi yang akan menunjuk kepada tika baharu, manakala rujukan lain (a, b dan c) akan kekal menunjuk kepada tika asal.
Atas ialah kandungan terperinci Adakah std::shared_ptr thread-selamat untuk objek yang diurusnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!