धागे सब कुछ साझा करते हैं [1]। पूरी प्रक्रिया के लिए एक पता स्थान है।
प्रत्येक थ्रेड का अपना स्टैक और रजिस्टर होता है, लेकिन साझा पता स्थान में सभी थ्रेड्स के ढेर दिखाई देते हैं।
यदि एक थ्रेड अपने स्टैक पर कुछ ऑब्जेक्ट आवंटित करता है, और दूसरे थ्रेड को पता भेजता है, तो वे दोनों उस वस्तु तक समान पहुंच प्राप्त करेंगे।
दरअसल, मैंने अभी एक व्यापक मुद्दे पर ध्यान दिया है: मुझे लगता है कि आप शब्द खंड के दो उपयोगों को भ्रमित कर रहे हैं ।
एक निष्पादन योग्य (उदाहरण के लिए, ईएलएफ) के लिए फ़ाइल प्रारूप में अलग-अलग खंड हैं, जिन्हें खंड के रूप में संदर्भित किया जा सकता है, जिसमें संकलित कोड (पाठ), आरंभिक डेटा, लिंकर प्रतीक, डिबग जानकारी आदि शामिल हैं, कोई ढेर या स्टैक खंड नहीं हैं। यहाँ, चूंकि रनटाइम केवल निर्माण हैं।
इन बाइनरी फ़ाइल सेगमेंट को अलग-अलग अनुमतियों (जैसे, कोड / टेक्स्ट के लिए केवल-पढ़ने योग्य निष्पादन योग्य, और प्रारंभिक डेटा के लिए गैर-निष्पादन योग्य लिखने) के साथ, प्रक्रिया पता स्थान में मैप किया जा सकता है।
इस पते के क्षेत्र का उपयोग विभिन्न उद्देश्यों के लिए किया जाता है, जैसे कि ढेर आवंटन और थ्रेड स्टैक, कन्वेंशन द्वारा (आपकी भाषा रनटाइम लाइब्रेरीज़ द्वारा लागू)। यह सब सिर्फ स्मृति है, और शायद तब तक खंडित न हो जब तक कि आप आभासी 8086 मोड में नहीं चल रहे हैं। प्रत्येक थ्रेड का स्टैक थ्रेड निर्माण समय में आबंटित मेमोरी का एक हिस्सा होता है, जिसमें स्टैक पॉइंटर रजिस्टर में संग्रहीत वर्तमान स्टैक शीर्ष पता होता है, और प्रत्येक थ्रेड अपने स्वयं के स्टैक पॉइंटर को अन्य रजिस्टरों के साथ रखता है।
[१] ठीक है, मुझे पता है: सिग्नल मास्क, टीएसएस / टीएसडी आदि। इसके सभी मैप किए गए प्रोग्राम सेगमेंट सहित पता स्थान अभी भी साझा किए जाते हैं।