Rumah > pembangunan bahagian belakang > C++ > Adakah std::shared_ptr thread-selamat untuk objek yang diurusnya?

Adakah std::shared_ptr thread-selamat untuk objek yang diurusnya?

Patricia Arquette
Lepaskan: 2024-11-15 13:03:02
asal
332 orang telah melayarinya

Is std::shared_ptr thread-safe for the object it manages?

Sejauh manakah std::shared_ptr memastikan keselamatan benang?

Soalan Asal:

  1. Rujukan mengira dalam std::shared_ptr dijamin selamat untuk benang dan bebas platform.
  2. Hanya utas yang memegang rujukan terakhir akan memanggil padam pada objek kongsi.
  3. std::shared_ptr melakukan tidak menyediakan sebarang keselamatan benang untuk objek yang disimpannya.

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));
Salin selepas log masuk
  • Soalan: Adakah panggilan reset() dalam Thread IV akan memadamkan contoh sebelumnya A yang dibuat dalam Thread I dan menggantikannya dengan tika baharu?
  • Jawapan: Tidak, hanya d akan menunjuk ke A(10) baharu, manakala a, b, dan c akan terus menunjuk ke A(1 asal).

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!

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