2010-02-22 7 views
7

यदि आपके पास कोड के कुछ ब्लॉक हैं जो आप ऑब्जेक्ट को बाहर निकालने और साफ़ करने के निष्पादन को रोकना चाहते हैं, तो निष्पादन को रोकने के लिए लॉक का उपयोग किया जा सकता है?मॉनिटर के साथ क्या होता है। मिलान करने वाले मॉनीटर के बिना दर्ज करें। एक्सिट करें?

Monitor.TryEnter(cleanupLock, ref acquiredLock); 

TryEnter सुनिश्चित करना है कि कोड निष्पादित नहीं है इस्तेमाल किया जा सकता है, और के बाद से यह ताला के लिए इंतजार नहीं कर रहा है कि वहाँ एक गतिरोध नहीं होगा।

एक और धागा ताला पकड़ लेगा जब यह निर्धारित करता है कि यह शटडाउन का समय है।

Monitor.Enter(cleanupLock); 

सफाई धागा कभी नहीं कहता है

Monitor.Exit(cleanupLock); 

होगा इस कारण एक समस्या है?

उत्तर

8

हां, को एक सफल Monitor.TryEnter या Monitor.Enter के लिए कॉल करने से आपके आवेदन में डेडलॉक का तेज़ ट्रैक नहीं है। आप इसे बहुत सीमित परिदृश्य में काम करने में सक्षम हो सकते हैं लेकिन अंततः कोड या परिदृश्य बदल जाएगा और यह आपको काटने के लिए वापस आ जाएगा। बस यह मत करो।

+0

परंपरागत उपयोग के खिलाफ जाकर इस पैटर्न के खिलाफ एक अच्छा तर्क है। –

6

केवल "समस्या" यह होगी कि क्लीनअप लॉक चर पर कोई अन्य कोड कभी भी लॉक प्राप्त करने में सक्षम नहीं होगा।

यह समस्या हो सकती है या नहीं भी हो सकती है - हालांकि, यह मॉनीटर का दुरुपयोग है, इसलिए मैं ऐसा करने से बचूंगा। आईएमओ को अधिक सामान्य तरीके से इस स्थिति को संभालना बेहतर होगा।

0

क्या इससे कोई समस्या होगी?

हां। लॉक कभी जारी नहीं किया जाएगा।

Source:

बुला धागा obj पैरामीटर पर ताला स्वामी होना चाहिए। यदि कॉलिंग थ्रेड निर्दिष्ट ऑब्जेक्ट पर लॉक का मालिक है, और ऑब्जेक्ट के लिए एक्जिट और एंटर कॉल की बराबर संख्या बना दी है, तो लॉक जारी किया गया है। यदि कॉलिंग थ्रेड ने एंटर के रूप में कई बार बाहर निकलने का आह्वान नहीं किया है, तो लॉक जारी नहीं किया गया है।

1

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

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