2011-08-04 16 views
12

जब कोई थ्रेड पूल थ्रेड किया जाता है, तो नाम या थ्रेड स्थानीय डेटा जैसी चीजें रीसेट हो जाती हैं? तो जब अगली बार पूल से थ्रेड निकलता है, तो यह बिल्कुल नया है?क्या .NET थ्रेडपूल थ्रेड पूल पर वापस जाने पर रीसेट हो जाता है?

क्या थ्रेडपूल धागे के इस पहलू पर कोई "आधिकारिक" दस्तावेज है?

+1

संभावित डुप्लिकेट [थ्रेडस्टैटिक विशेषता के साथ समानांतर एक्सटेंशन का उपयोग करना। क्या यह स्मृति को रिसाव कर सकता है?] (Http://stackoverflow.com/questions/3029449/using-parallel-extensions-with-threadstatic-attribute-could-it-leak-memory) –

उत्तर

8

यह जारी होने पर थ्रेड स्थानीय संग्रहण को साफ़ नहीं करता है, जो नोट करने का सबसे महत्वपूर्ण पहलू है।

http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

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

यह कुछ के बारे में बहुत सावधान रहना है ...

+0

msdn के लिंक के लिए धन्यवाद। बेशक, जब मैंने 2.0 संस्करण को देखा कि जानकारी का ब्लॉक गुम था। –

2

यह a very good read on parallel programming and TPL in .NET (4)

जहाँ तक के रूप में मैं जानता हूँ कि कोई रीसेट नहीं है।

लिंक किए गए दस्तावेज़ में ऐसे तरीकों से इसका उल्लेख किया गया है कि इसका सामना कैसे किया जाए।

3

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

असली दुनिया रूपक एक बस होगी जो आप रोज़ाना काम करने के लिए लेते हैं। आइए कहें कि किसी कारण से आप बस पर अपना बैग छोड़ना चाहते हैं क्योंकि आप जानते हैं कि यह चोरी नहीं होगा। यह एक बुरा विचार है क्योंकि अगली बार जब आप बस पर जाते हैं तो आपको अपना बैग नहीं मिल सकता है। बस क्योंकि यह एक अलग बस हो सकती है। बस डिपो लाइनों के बीच बसों को घुमा सकता है या पुरानी बसों का निपटान कर सकता है। जैसे थ्रेड पूल आपको बताए बिना धागे का पुन: उपयोग या रिटायर कर सकता है।

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