Benang Terpisah dalam Kekosongan Benang
Dalam pengaturcaraan berbilang benang, benang tertanggal terus dilaksanakan walaupun selepas dipisahkan daripada urutan pemilik asalnya . Ini menimbulkan persoalan: apabila utas utama keluar, apakah yang berlaku kepada utas terpisah yang masih berjalan?
Respons Standard
C Standard (N3797) kekal senyap mengenai nasib benang tertanggal apabila main() keluar. Bahagian 1.10 (Penamatan Program) mahupun Seksyen 30.3 (Benang) tidak mentakrifkan gelagat secara eksplisit.
Walaupun peninggalan ini, secara amnya diandaikan bahawa utas yang terpisah terus berjalan sehingga ia menyelesaikan pelaksanaannya. Andaian ini berpunca daripada fakta bahawa rangkaian adalah entiti yang dikawal oleh sistem pengendalian dan mungkin tidak ditamatkan oleh urutan utama program.
Potensi Bahaya
Walau bagaimanapun, membenarkan tertanggal benang untuk diteruskan selama-lamanya boleh membawa kepada tingkah laku yang tidak ditentukan jika benang ini mengakses pembolehubah atau objek statik kepunyaan orang lain benang atau menyentuh objek statik selepas pemusnahan objek statik telah selesai.
Khususnya, Piawaian C (Seksyen 1) menyatakan bahawa selepas semua objek benang telah dimusnahkan dan mana-mana pengendali isyarat yang berpotensi telah selesai melaksanakan, satu-satunya kod yang dibenarkan ialah kod yang dibenarkan dalam pengendali isyarat (cth., perpustakaan
Pendekatan Luar Biasa
Untuk mengelakkan tingkah laku yang tidak ditentukan semasa urutan tertanggal masih berjalan apabila main() keluar, pembangun boleh menggunakan satu daripada dua pendekatan:
Kesimpulan
Walaupun Piawaian C tidak mentakrifkan secara eksplisit tingkah laku tertanggal benang apabila main() keluar, ia boleh disimpulkan bahawa mereka terus melaksanakan sehingga selesai. Pembangun harus sedar tentang potensi bahaya yang terlibat dan menggunakan langkah yang sesuai (pencantuman manual atau keselamatan pengendali isyarat) untuk mengelakkan tingkah laku yang tidak ditentukan.
Atas ialah kandungan terperinci Apa yang Berlaku kepada Benang Tertanggal Apabila Benang Utama Keluar dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!