2011-06-02 20 views
7

धागे का काम करने का मेरा मॉडल यह है कि कुछ ThreadManager प्रत्येक थ्रेड को एक मोड़ देता है। जब यह धागा की बारी है, तो यह कोड की कुछ पंक्तियों को निष्पादित करता है।थ्रेड को रोकना/रोकना क्यों बुरा है?

एक धागा रोकने के लिए, एक बस ThreadManager (क्षण भर के) कि धागा एक मोड़ है करने से रोकने के लिए नहीं कर सकता है?

एक धागा गर्भपात करने के लिए, नहीं ThreadManager सिर्फ कभी नहीं कि धागा एक और मोड़ दे सकता है?

समस्या क्या है?

MSDN से

उत्तर

12

उद्धरण रोक धागे के बारे में:

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

निरस्त धागा अप्रत्याशित परिस्थितियों का कारण बन सकता है। इसके बारे में एक अच्छा लेख है: http://www.bluebytesoftware.com/blog/2009/03/13/ManagedCodeAndAsynchronousExceptionHardening.aspx

4

मैं एलेक्स से सहमत हूं, लेकिन यदि आपको धागे को "रोकना" की आवश्यकता है, तो आगे बढ़ने के लिए, शायद कुछ प्रकार के लॉकिंग तंत्र को देखना चाहिए जैसे सेमाफोरस, म्यूटेक्स , या उपलब्ध कई अन्य लोगों में से एक।

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

+0

+1। –

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