2009-08-29 14 views
24

pthread_create के लिए समारोह हेडर कुछ इस तरह दिखता है:क्यों के लिए pthread_create वापसी शून्य * start_routine और ले करता है शून्य *

int pthread_create(pthread_t * thread, 
        const pthread_attr_t * attr, 
        void * (*start_routine)(void *), 
        void *arg); 

मैं यह सब सिवाय इसके कि start_routine के लिए समारोह सूचक रूप void* (*fpointer) (void*) जो इसका मतलब है की है समझते हैं शून्य पॉइंटर में लेता है और शून्य सूचक देता है।

शून्य पॉइंटर जो इसे लेता है वह start_routine के लिए एक तर्क में पास करने का एक तरीका है, मुझे वह हिस्सा मिलता है, लेकिन मुझे समझ में नहीं आता कि फ़ंक्शन एक शून्य सूचक क्यों देता है? क्या कोड भी शून्य सूचक नोटिस होगा?

उत्तर

27

प्रलेखन से pthread_create के लिए:

धागा अपने एकमात्र तर्क के रूप में आर्ग के साथ start_routine क्रियान्वित बनाई गई है। अगर start_routine लौटाता है, तो प्रभाव यह है कि बाहर निकलने की स्थिति के रूप में start_routine के वापसी मान का उपयोग करके pthread_exit() को एक निहित कॉल किया गया था। ध्यान दें कि जिस धागे में मुख्य() मूल रूप से बुलाया गया था उससे अलग है। जब यह मुख्य() से लौटाता है, तो प्रभाव यह है कि बाहर निकलने की स्थिति के रूप में मुख्य() के वापसी मूल्य का उपयोग करके बाहर निकलने के लिए एक निहित कॉल था।

और pthread_exit:

pthread_exit() फ़ंक्शन बुला धागा समाप्त हो जाता है और मूल्य value_ptr किसी भी सफल करने के लिए उपलब्ध समाप्त धागे से शामिल होने के बनाता है।

तो अगर आप एक धागे पर एक pthread_join करते हैं, सूचक यह रिटर्न छूट्टी से वापस आने धागा करने के लिए पारित हो जाता है, तो आप एक और मर धागे से सूचना प्रसारित करने की इजाजत दी धागा रहने वाले।

7

spec से:

तो start_routine रिटर्न, प्रभाव है के रूप में अगर वहाँ था pthread_exit() को एक अंतर्निहित कॉल बाहर निकलें स्थिति के रूप में start_routine की वापसी मान का उपयोग कर।

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