2009-06-30 11 views
6

pthread_join() आदमी पृष्ठ से:क्या मुझे प्रत्येक थ्रेड को pthread_join करना है?

When a joinable thread terminates, its memory resources (thread descriptor and stack) are not deallocated until thread performs pthread_join on it. Therefore, pthread_join must be called once for each joinable thread created to avoid memory leaks.

तो इसका मतलब यह है कि मैं प्रत्येक थ्रेड मैं लीक को रोकने के लिए बनाने में शामिल होने की आवश्यकता है? लेकिन कॉलर ब्लॉक करने में शामिल हो।

कृपया, समझाएं।

उत्तर

8

आप को की आवश्यकता नहीं है, लेकिन यह एक अच्छा विचार है। Pthread_join() को कॉल किए बिना, संभावना है कि मुख्य() फ़ंक्शन थ्रेड समाप्त होने से पहले वापस आ जाएगा। इस मामले में, pthread_join() अनुप्रयोग को तब तक प्रतीक्षा करता है जब तक कि अन्य थ्रेड प्रसंस्करण समाप्त न हो जाए। इसके अलावा, जब आप धागे में शामिल होते हैं, तो यह आपको वापसी मूल्यों की जांच करने का मौका देता है और यह सुनिश्चित करता है कि सब कुछ सुचारू रूप से चला गया हो, और यह आपको थ्रेड के साथ साझा किए गए किसी भी संसाधन को साफ़ करने का मौका देता है।

संपादित करें: आपके लिए रुचि का एक फ़ंक्शन pthread_detach() है। pthread_detach() धागे के भंडारण को थ्रेड समाप्त होने के बाद साफ़ करने की अनुमति देता है, इसलिए बाद में धागे में शामिल होने की आवश्यकता नहीं है।

+2

आप pthread_attr_setdetachstate – Hasturkun

+0

का उपयोग कर PTHREAD_CREATE_DETACHED विशेषता के साथ थ्रेड भी बना सकते हैं, मैंने सोचा था कि ऐसा पैरामीटर था, लेकिन मुझे यह याद नहीं आया कि इसे क्या कहा गया था। मेरी याददाश्त को ताज़ा करने के लिए धन्यवाद! –

संबंधित मुद्दे