Mengapa pthreads yang tidak bergabung membocorkan sumber daya ketika thread tidak dilepas setelah pthread_create

Saya mengambil contoh dari

https://www.kernel.org/doc/man-pages/online/pages/man3/pthread_create.3.html

membuatnya berjalan tanpa batas (dengan tidur kecil sehingga penggunaan CPU tidak menjadi hambatan sehingga tidak ada antrian thread) dengan membuat thread dengan pthread_create tanpa pernah memanggil pthread_join. Hal itu menyebabkan kebocoran memori dan akhirnya PC kehabisan memori. Ketika saya menambahkan pthread_detach segera setelah membuat program thread berperilaku baik dan penggunaan memori konstan setelah beberapa waktu.

Saya mendapat kesan bahwa ketika sebuah utas keluar (saat penutupan } dari fungsi yang jika diberikan kepada pthread_create) semua sumber dayanya akan dibersihkan.


person NoSenseEtAl    schedule 13.12.2012    source sumber


Jawaban (1)


Saya mendapat kesan bahwa ketika sebuah utas keluar (saat penutupan } dari fungsi yang jika diberikan kepada pthread_create) semua sumber dayanya akan dibersihkan.

Itu adalah kesan yang salah. Seperti yang Anda katakan, semua sumber daya dilepaskan untuk thread yang sudah selesai saat Anda memanggil pthread_join, atau thread tersebut adalah thread terpisah.

Untuk thread yang tidak terlepas, beberapa sumber daya harus disimpan - jika tidak, Anda tidak bisa mendapatkan nilai kembalian dari thread tersebut dengan panggilan selanjutnya ke pthread_join. Utas yang terpisah tidak dapat digabungkan, jadi Anda tidak bisa mendapatkan nilai keluar darinya.

Banyak implementasi menyimpan nilai kembalian ini pada tumpukan thread, dan dengan demikian mempertahankan seluruh tumpukan sampai seseorang memanggil pthread_join pada thread yang tidak terlepas.

person nos    schedule 13.12.2012