Rumah > pembangunan bahagian belakang > C++ > Adakah std::shared_ptr benar-benar selamat untuk benang, dan bagaimana pula dengan pengubahsuaian serentak pada objek runcing?

Adakah std::shared_ptr benar-benar selamat untuk benang, dan bagaimana pula dengan pengubahsuaian serentak pada objek runcing?

Patricia Arquette
Lepaskan: 2024-11-17 03:44:03
asal
545 orang telah melayarinya

Is std::shared_ptr truly thread-safe, and what about concurrent modifications to the pointed object?

Keselamatan Benang std::shared_ptr

Pernyataan yang anda petik daripada MSDN mengenai keselamatan rangkaian std::shared_ptr boleh disalahtafsirkan. Ini menunjukkan bahawa walaupun berbilang urutan boleh membaca dan menulis objek shared_ptr yang berbeza secara serentak, ini tidak menjamin keselamatan mengubah suai objek shared_ptr itu sendiri.

TL;DR:

Keselamatan urutan std::shared_ptr hanya berkaitan dengan pengurusan berbilang penunjuk yang menunjuk ke objek asas yang sama. Ia tidak dilanjutkan ke kandungan objek kongsi atau penulisan serentak kepada contoh shared_ptr.

Pecahan:

Ptr_kongsi secara dalaman terdiri daripada dua komponen:

  • Blok Kawalan: Menguruskan kiraan rujukan shared_ptr dan memastikan pemusnahan objek runcing yang betul. Komponen ini selamat untuk benang.
  • Objek Bertunjuk: Struktur data sebenar atau objek yang dikongsi. Keselamatan urutan objek ini bergantung pada pelaksanaannya.

Contoh:

Dalam coretan kod anda, global ialah penuding dikongsi kepada objek konfigurasi. Thread 1 salinan global ke dalam penuding dikongsi sendiri, peribadi. Jika Thread 2 kemudiannya mengubah suai global, peribadi masih akan menunjuk ke objek konfigurasi asal, kerana blok kawalan tidak diubah suai. Walau bagaimanapun, jika Thread 2 memperuntukkan objek konfigurasi baharu kepada global, private akan kekal menunjuk ke objek asal.

Keselamatan Benang Objek Runcing:

Keupayaan untuk selamat ubah suai objek runcing melalui berbilang benang bergantung pada pelaksanaan objek. Dalam kes kelas konfigurasi anda, jika ia membenarkan penulisan serentak tanpa penyegerakan, seperti menambah atau mengalih keluar tetapan, kod tersebut tidak akan selamat untuk benang.

Penyelesaian:

Untuk memastikan keselamatan benang bagi pengubahsuaian objek, gunakan mekanisme penyegerakan seperti std::mutex untuk menjaga akses kepada objek shared_ptr atau objek kongsi itu sendiri.

Atas ialah kandungan terperinci Adakah std::shared_ptr benar-benar selamat untuk benang, dan bagaimana pula dengan pengubahsuaian serentak pada objek runcing?. 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