2012-08-11 10 views
12

मेरे पास थ्रेड और कॉलबैक के बारे में एक सामान्य प्रश्न है। उदाहरण के लिए कहें कि हमारे पास मुख्य कार्यक्रम के साथ लगातार चलने वाला धागा है।कॉलबैक फ़ंक्शंस और थ्रेड के बारे में सामान्य प्रश्न

मुख्य कार्यक्रम ने थ्रेड के साथ कॉलबैक फ़ंक्शन पंजीकृत किया है। तो धागा किसी भी समय कॉलबैक फ़ंक्शन को कॉल कर सकता है। आम तौर पर, हम थ्रेड पर फ़ंक्शन पॉइंटर पास करके कॉलबैक पंजीकृत करते हैं। मैं जानना चाहता हूं कि उस कॉलबैक फ़ंक्शन को थ्रेड द्वारा कब बुलाया जाता है, क्या यह उस धागे का हिस्सा होगा या, यह मुख्य कार्यक्रम का हिस्सा होगा। मैं इस प्रक्रिया के तंत्र को जानना चाहता हूं जैसे कि मुख्य कार्यक्रम निष्पादन रोक दिया गया है या जब कॉलबैक को थ्रेड द्वारा बुलाया जाता है तो बाधित होता है। एक और बात यह है कि जब कॉलबैक कॉल किया जाता है तो फंक्शन कॉल स्टैक कैसे व्यवहार करेगा।

+0

बहु-थ्रेडिंग के लिए आप किस दृष्टिकोण का उपयोग करते हैं? – klm123

उत्तर

10

सामान्य नियम के रूप में, कॉलर के संदर्भ (थ्रेड) में फ़ंक्शन कॉल हमेशा बनाए जाते हैं। इससे कोई फर्क नहीं पड़ता कि कैली एक समारोह, सदस्य समारोह, मज़ेदार वस्तु, या कुछ और है।

दूसरे शब्दों में, जब थ्रेड आपके कॉलबैक को कॉल करता है, तो कॉल थ्रेड में होता है। कॉलबैक निष्पादित करने के लिए मुख्य धागा रोक नहीं है। वास्तव में, यह कॉलबैक के निष्पादन के साथ किसी भी तरह से शामिल नहीं है।

विभिन्न ढांचे यह बनाने के लिए चाल प्रदान करते हैं जैसे कि एक थ्रेड सीधे किसी अन्य को कॉल कर सकता है, लेकिन यह हमेशा किसी तरह के मार्शल संदेश-पासिंग तंत्र के माध्यम से एक सहकारी तरीके से किया जाता है। थ्रेड आम तौर पर एक-दूसरे के ढेर को झुका नहीं देते हैं।

+1

तो उदाहरण के लिए मेरे मुख्य कार्यक्रम में 2 कार्य हैं। 1) FunctionA() -> यह कॉलबैक 2 है) FunctionB() -> यह सामान्य कार्य है। इन दोनों कार्यों में वैश्विक चर का उपयोग किया जा सकता है। तो इस संदर्भ में उस चर पर आवश्यक एक म्यूटेक्स है। कॉलबैक किसी भी समय अवसर हो सकता है। –

+2

@ उपयोगकर्ता1592046: हां। कोई समवर्ती पहुंच (कम से कम एक जिसमें एक लेखन है) को किसी प्रकार की सिंक्रनाइज़ेशन तंत्र द्वारा संरक्षित किया जाना चाहिए। यदि एक थ्रेड वैरिएबल को बदलने के लिए दूसरे की प्रतीक्षा करना चाहता है, तो आपको एक सिग्नलिंग तंत्र जैसे सैमफोर या सशर्त चर का उपयोग करने की भी आवश्यकता होगी। –

+0

स्पष्टीकरण के लिए धन्यवाद :-) –

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