2009-11-10 5 views
8

एक बहु थ्रेडेड प्रक्रिया में प्रोग्राम राज्य के निम्न घटकों में से कौन सा घटक धागे में साझा किया जाता है?बहु-थ्रेडेड प्रक्रिया में थ्रेड में प्रोग्राम स्थिति के कौन से घटक साझा किए जाते हैं?

  • रजिस्टर महत्व देता
  • ढेर मेमोरी
  • वैश्विक चर
  • ढेर स्मृति

मेरे सुझाव; केवल वैश्विक चर, वैश्विक चर को ढेर पर आवंटित किया जाता है? तो ढेर स्मृति और वैश्विक चर। क्या ये सही है?

उत्तर

14

हीप मेमोरी हमेशा।

वैश्विक चर मंच पर निर्भर करता है, आमतौर पर उन्हें साझा किया जाता है।

स्टैक थ्रेड-विशिष्ट, साथ ही पंजीयक भी है।

+0

लिनक्स पर साझा किया गया? – Algific

+0

@data_jepp हां, लिनक्स पर साझा किया गया। यदि आप थ्रेड-लोकल "ग्लोबल" वैरिएबल चाहते हैं तो आप pthread_ * फ़ंक्शंस का उपयोग करके थ्रेड-लोकल स्टोरेज आवंटित कर सकते हैं। –

1

यह भाषा और धागा कार्यान्वयन पर निर्भर करता है। उदाहरण के लिए, मुझे नहीं लगता कि सी भी आपको सीधे सीपीयू रजिस्टरों तक पहुंचने देता है, इसलिए यह कहता है कि शेयर रजिस्टर रजिस्टर्स (जो, रिकॉर्ड के लिए, मुझे काफी यकीन है कि यह नहीं है)। सी में भी, वैश्विक चर वास्तव में ढेर पर आवंटित नहीं हैं, हालांकि वे अन्य भाषाओं में हो सकते हैं।

ढेर अधिक जटिल है। सी/pthreads में, प्रत्येक धागे का अपना ढेर होता है, लेकिन अन्य भाषाओं और थ्रेडिंग मॉडल में, स्थिति बस इतना जटिल हो सकती है क्योंकि अंतर्निहित स्टैक मॉडल इतना आसान नहीं हो सकते हैं।

+0

आप रजिस्टरों तक पहुंचने के लिए सी में इनलाइन असेंबली का उपयोग कर सकते हैं, लेकिन फिर इसे "पोर्टेबल असेंबली" का नाम खोना शुरू हो जाता है। – NVRAM

0

ढेर: कोई

रजिस्टरों: कोई

ढेर: हाँ

वैश्विक (आप y चयन करने के लिए है या यह निर्भर करता है एन, सच जवाब है आपके पास है): हां

0

वैश्विक मूल्यों और ढेर स्मृति को एक बहुप्रचारित प्रक्रिया में साझा किया जाता है। रजिस्टर मान और स्टैक मेमोरी प्रत्येक थ्रेड के लिए निजी हैं।