Rumah > pembangunan bahagian belakang > C++ > Mengapa Pemusnah `std::future` Dikembalikan oleh `std::async` Menyekat?

Mengapa Pemusnah `std::future` Dikembalikan oleh `std::async` Menyekat?

Mary-Kate Olsen
Lepaskan: 2024-11-15 14:26:02
asal
933 orang telah melayarinya

Why Does the `std::future` Destructor Returned by `std::async` Block?

Menyekat Sifat std::future Destructor Dikembalikan oleh std::async

Semasa berhasrat untuk melancarkan tugasan secara tidak segerak, didapati bahawa pemusnah std::future dikembalikan oleh std::async mempamerkan tingkah laku menyekat. Ini menimbulkan persoalan tentang rasional di sebalik keputusan reka bentuk ini dan sama ada ia boleh dipertingkatkan untuk kemudahan dan kecekapan.

Argumen untuk Menyekat Pemusnah

Salah satu kebimbangan utama yang ditangani oleh pemusnah menyekat menghalang benang "melarikan diri". Jika std::future dimusnahkan tanpa menunggu urutan yang berkaitan selesai, ia boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan potensi kerosakan ingatan.

Seperti yang diterangkan dalam kertas Hans Boehm (N3679), isu ini boleh timbul apabila thread beroperasi pada data yang telah dimusnahkan. Tanpa pemusnah yang menyekat, utas itu berpotensi untuk terus mengakses dan mengubah suai data tersebut, yang membawa kepada isu memori silang benang.

Pendekatan Alternatif

Sesetengah telah mencadangkan agar pemusnah tidak menyekat adalah mencukupi jika kaedah dapatkan atau tunggu sentiasa dipanggil untuk mendapatkan keputusan atau menunggu untuk selesai. Walau bagaimanapun, Boehm berhujah bahawa bergantung pada panggilan eksplisit terdedah kepada pengawasan dan boleh membawa kepada kelemahan keselamatan. Keadaan luar biasa, seperti pengecualian semasa pelaksanaan, boleh memintas panggilan sedemikian dan mengakibatkan penciptaan benang lari.

Status Semasa dan Perkembangan Masa Depan

Walaupun perbincangan berterusan dalam Jawatankuasa piawaian C, tiada perubahan yang dirancang untuk tingkah laku menyekat std::pemusnah masa hadapan dalam C 14. Walau bagaimanapun, isu itu masih dalam pertimbangan dan versi C masa hadapan boleh menangani tingkah laku ini.

Syor untuk Amalan

Untuk mengelakkan potensi masalah yang berkaitan dengan penyekatan pemusnah, adalah disyorkan untuk sentiasa memanggil get atau tunggu sebelum memusnahkan std::future yang dikembalikan oleh std::async. Ini memastikan bahawa urutan yang berkaitan telah menyelesaikan pelaksanaannya dan semua sumber yang diperlukan telah dikeluarkan.

Atas ialah kandungan terperinci Mengapa Pemusnah `std::future` Dikembalikan oleh `std::async` Menyekat?. 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