2012-01-23 21 views
16

.NET ढांचे में थ्रेड की स्थिति this link में समझाया गया है।.NET ढांचे में थ्रेड लाइफसाइक्ल

मैं हाल ही में एक वेब साइट में इस तस्वीर को देखा और सवालों की एक जोड़ी मेरे मन के लिए आया था:

enter image description here

  1. ओएस में धागा जीवन चक्र पूरी तरह से में धागा जीवन चक्र के साथ गठबंधन नहीं है ।शुद्ध रूपरेखा। क्या कोई ऐसा संसाधन प्रदान कर सकता है जो ओएस में राज्यों से .NET ढांचे के साथ मेल खाता हो?

  2. हमारे पास नामक एक राज्य नहीं है जिसे .NET Framework में अवरुद्ध किया गया है। यदि यह I/O अनुरोध जारी करता है तो थ्रेड की स्थिति क्या होगी?

  3. का उद्देश्य क्या है राज्य? जब कोई थ्रेड Abort() विधि को कॉल करता है, तो यह AbortRequested स्थिति पर जायेगा और थ्रेड के बाद अनुरोध निरस्त करने का जवाब देगा, यह पर राज्य बंद हो जाएगा। तो का कार्य क्या है राज्य?

उत्तर

6

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

AbortRequested/Stopped चक्र थ्रेड को व्यवस्थित शट डाउन करने, अधिग्रहित संसाधनों को जारी करने और अन्य सफाई कार्यों को करने का अवसर प्रदान करता है।

http://www.albahari.com/threading/

+0

1. लेकिन .नेट फ्रेमवर्क में ** अवरुद्ध ** नामक कोई भी राज्य नहीं है। यदि ओएस (आई/ओ अनुरोध या लॉक या म्यूटेक्स द्वारा उल्लिखित) द्वारा थ्रेड अवरुद्ध किया गया है, तो इसकी स्थिति क्या होगी? 2. हाँ आप सही हैं, लेकिन प्रत्येक ओएस में एक पूर्वनिर्धारित धागा जीवन चक्र है। लिनक्स में एक है, विंडोज़ में भी एक है। आप इसे विलियम स्टॉलिंग द्वारा "ऑपरेटिंग सिस्टम" जैसी कुछ पाठ्यपुस्तकों के साथ देख सकते हैं। या नीचे दिए गए लिंक को देखें: http://www.macdesign.net/academic/it4813/it4813- सबमिट /IT4813-u03a1-Process_States.html – ManiAm

+0

सही,।नेट फ्रेमवर्क में अवरुद्ध नामक राज्य नहीं है, हालांकि कोई तरीका यह देखने के लिए जांच सकता है कि कोई विशेष 'लॉक' या 'म्यूटेक्स' थ्रेड को अवरुद्ध कर रहा है या नहीं। –

+0

विंडोज़ में धागे की मेरी समझ यह है कि वे अनिवार्य रूप से .NET Framework में थ्रेड के समान हैं। अपने (1) का जवाब देने के लिए, हमें यह जानने की आवश्यकता होगी कि आप किस तरह से विश्वास करते हैं * "ओएस में थ्रेड लाइफसाइक्ल पूरी तरह से थ्रेड लाइफसाइक्ल के साथ संरेखित नहीं है। * –

3

अपने प्रश्नों के उत्तर:

  1. मैं नहीं मानता कि इस मानचित्रण के रूप में आप आशा दिखाई देते हैं के रूप में उपयोगी होगा। मैंने कभी एक पार नहीं किया है और कभी इसकी आवश्यकता नहीं है।
  2. जब तक आप किसी डेडलॉक डिटेक्टर (बल्कि उन्नत) की तरह कुछ लिखने की कोशिश नहीं कर रहे हैं, तब तक "अवरुद्ध" स्थिति की वास्तविक आवश्यकता नहीं है। एक ठेठ डेवलपर परिप्रेक्ष्य से, ओएस "अवरुद्ध" स्थिति क्षणिक है और इसे अनदेखा किया जा सकता है। (ऐसा प्रतीत होता है कि आपका कोड चल रहा है, लेकिन ओएस के पास एसिंक प्रतिक्रिया प्राप्त होने तक कुछ भी नहीं है।)
  3. कल्पना की गई स्थिति को .NET के रूप में थ्रेड में सभी कोड के आस-पास एक अपवाद हैंडलर प्रदान करें। जब कोई अपवाद पकड़ा जाता है, जिससे थ्रेड मर जाता है, .NET आपके लिए एक निरस्त राज्य में अनुवाद करता है। अन्यथा, आप असामान्य और सामान्य थ्रेड समाप्ति के बीच अंतर बताने में सक्षम नहीं हो सकते हैं।
+0

धन्यवाद। ** 1 * * मैं स्टॉलिंग द्वारा "ऑपरेटिंग सिस्टम" जैसी ओएस किताबें पढ़ रहा था और वह विभिन्न ऑपरेटिंग सिस्टम में थ्रेड स्टेटस के लिए एक आरेख प्रदान करता था। मुझे यह देखने के लिए उत्सुक था कि नेट फ्रेमवर्क क्या है और वास्तव में क्या लागू किया गया है इसके बीच संबंध क्या है ओएस। आप सही जानते हैं कि यह मैपिंग सॉफ्टवेयर विकसित करने के लिए इतना उपयोगी नहीं है। ** 2 ** उदाहरण के लिए एक धागा उपयोगकर्ता इनपुट के लिए इंतजार कर रहा है। असल में यह धागा ऑपरेटिंग सिस्टम द्वारा अवरुद्ध है जब तक उपयोगकर्ता sth में प्रवेश नहीं करता कंसोल इनपुट, लेकिन थ्रेड की स्थिति चल रही है? – ManiAm

+0

** 3 **। क्या आप कृपया इस साइट के थ्रेड स्टेट सेक्शन की जांच कर सकते हैं। 'http://www.albahari.com/threading/part2.aspx#_ThreadState' उसका मतलब केवल _theory में है! _। – ManiAm

+0

@ManiAm: मुझे उन पृष्ठों पर कहीं भी "सिद्धांत केवल" शब्द नहीं दिखते हैं ... –

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