पुन: प्रवेश के पीछे विचार यह है कि दिनचर्या को पहले से निष्पादित करने के बीच में कहा जा सकता है और यह अभी भी सही काम करेगा।
आम तौर पर यह केवल पैरामीटर और स्टैक पर घोषित स्थानीय चर का उपयोग करके प्राप्त किया जाता है (सी शर्तों में, static
स्थानीय)। यह भी महत्वपूर्ण होगा कि यह निष्पादन के दौरान किसी भी वैश्विक संसाधन को लॉक न करे।
अब, आप पूछ सकते हैं, "नियमित रूप से एक अजीब चीज कितनी बार एक बार चलती है?" खैर, यह कुछ तरीकों से हो सकता है:
- दिनचर्या रिकर्सिव (या दिनचर्या के किसी अन्य सेट के साथ परस्पर-पुनरावर्ती) है।
- इसे किसी अन्य धागे द्वारा बुलाया जाता है।
- इसे एक बाधा से बुलाया जाता है।
यदि इनमें से किसी भी होता है, और दिनचर्या, एक वैश्विक (या सी static
स्थानीय) फिर नए निष्पादन संभावित परिवर्तन पहले निष्पादन बनाया का सफाया कर सकता है संशोधित किया गया है। उदाहरण के तौर पर, यदि उस ग्लोबल को लूप कंट्रोल वेरिएबल के रूप में इस्तेमाल किया गया था, तो यह पहली बार निष्पादन का कारण बन सकता है, जब इसे अंततः फिर से शुरू किया जाता है, तो गलत संख्या को लूप करने के लिए।
स्रोत
2011-08-11 12:35:32
ध्यान दें कि आपके मामले के लिए पुनर्वित्त आवश्यक नहीं है (2) (इसे किसी अन्य धागे द्वारा बुलाया जाता है)। उस मामले के लिए लॉकिंग हमेशा पर्याप्त होती है, क्योंकि धागा स्वतंत्र रूप से प्रगति कर सकता है। रिकर्सिव कॉलिंग, और सिग्नल हैंडलर से कॉल, अलग हैं कि "बाहरी" कॉल "आंतरिक" कॉल रिटर्न तक प्रगति नहीं कर सकता है। –
ध्यान दें कि थ्रेड स्थानीय संग्रहण का उपयोग करके एक गैर-पुन: प्रवेश फ़ंक्शन थ्रेड सुरक्षित हो सकता है। –