2012-08-04 5 views
7

मैं नीचे के रूप में कुछ कोड पढ़ें:pthread में PTHREAD_CREATE_JOINABLE का उपयोग क्या है?

void 
mcachefs_file_start_thread() 
{ 
    pthread_attr_t attrs; 
    pthread_attr_init(&attrs); 
    pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_JOINABLE); 
    pthread_create(&mcachefs_file_threadid, &attrs, mcachefs_file_thread, NULL); 
} 

यहाँ, attrsPTHREAD_CREATE_JOINABLE के रूप में स्थापित करने का उपयोग क्या है? इसके अलावा, क्या यह pthead_create द्वारा बनाए गए थ्रेड की डिफ़ॉल्ट विशेषता नहीं है?

उत्तर

11

हाँ, PTHREAD_CREATE_JOINABLE डिफ़ॉल्ट विशेषता है। इसका उद्देश्य यह है कि यह आपको थ्रेड पर pthread_join पर कॉल करने की अनुमति देता है, जो एक ऐसा फ़ंक्शन है जो थ्रेड समाप्त होने तक प्रतीक्षा करता है, और यदि इसकी मुख्य दिनचर्या हो तो आपको वापस मूल्य देता है।

कभी कभी, जब आप कुछ पृष्ठभूमि काम करने के लिए एक धागा बना रहे हैं, यह एक अच्छा विचार यकीन है कि इससे पहले कि आप अपने परिणामों का उपयोग या कुछ और करने के लिए ले जाने के लिए यह समाप्त हो गया है बनाने के लिए हो सकता है। यही वह है जो जुड़ने योग्य धागे के लिए हैं।

+0

सही जा रहा है, के लिए +1 हालांकि मैं एक अलग व्याख्या 'यह आप आसानी से अपने एप्लिकेशन को लॉक करने के लिए, आप लगातार/बनाने समाप्त/एक अनियंत्रित ढंग से धागे को नष्ट करने की अनुमति देते हैं अनुमति देने के लिए है पसंद करते हैं, की अनुमति देने के धागे सूक्ष्म प्रबंधन के प्रयास कि काम नहीं करेगा, समग्र प्रदर्शन को कम करेगा और आपके ऐप को तुरंत बंद करने से रोक देगा या वास्तव में, बिल्कुल '। –

3

POSIX कल्पना से, एक नव प्रारंभ सूत्र में अलग राज्य विशेषता की डिफ़ॉल्ट सेटिंग का श्रेय वस्तु वास्तव में PTHREAD_CREATE_JOINABLE है। उदाहरण http://linux.die.net/man/3/pthread_attr_setdetachstate के लिए देखें तो तुम ठीक कह रहे हैं: कोड के pthread_attr_setdetachstate लाइन अपने कोड स्निपेट में आवश्यक नहीं है।