Mengapa Pemusnah Masa Depan Dikembalikan daripada std::async Blocking?
Dalam C 11, pemusnah masa depan dikembalikan oleh std::async blok, membawa kepada potensi kebuntuan. Tingkah laku ini telah mencetuskan kebimbangan, mendorong satu siri cadangan dan perbincangan dalam jawatankuasa penyeragaman.
Inti isu terletak pada memastikan keselamatan benang. Tanpa tingkah laku menyekat, situasi boleh timbul di mana utas yang berkaitan terus dilaksanakan selepas masa depan telah dimusnahkan, tidak meninggalkan cara untuk menyegerakkan penyiapannya. Ini boleh mengakibatkan kerosakan memori atau malah keselamatan sistem terjejas.
Seperti yang dijelaskan oleh Hans Boehm dalam N3679, senario ini diburukkan lagi oleh pengecualian yang tidak dikendalikan yang mungkin memintas kod yang bertujuan untuk menunggu selesai. Oleh itu, pemusnah penyekat bertindak sebagai jaring keselamatan, menghalang hasil malapetaka tersebut.
Walaupun telah berbincang secara meluas, komuniti C tidak mencapai kata sepakat mengenai perkara ini. Sehingga C 14, pemusnah std::future dan std::thread kekal disekat.
Walau bagaimanapun, keadaan mungkin berubah pada masa hadapan. Laporan Perjalanan Michael Wong dari 2013 menunjukkan bahawa walaupun usul untuk menghentikan std::async gagal, terdapat peningkatan pengiktirafan tentang potensi bahaya yang ditimbulkan oleh kelakuan menyekatnya.
Sementara itu, pengaturcara harus menyedari perkara ini mengeluarkan dan menggunakan langkah yang sesuai, seperti pengawal skop atau mekanisme penyegerakan yang jelas, untuk memastikan keselamatan benang apabila bekerja dengan niaga hadapan yang dikembalikan daripada std::async.
Atas ialah kandungan terperinci Mengapa Pemusnah Masa Depan `std::async` Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!