2014-05-16 6 views
5

मैं कुछ जांच कर रहा हूं कि वास्तव में मॉनिटर कैसे करें। आंतरिक रूप से काम करता है। मैं the code के माध्यम से देखा और यह प्रवेश करने के लिए वास्तविक तंत्र एक बाहरी समारोह के अंदर है लगता है:मॉनिटर कैसे करता है। काम दर्ज करें?

[System.Security.SecuritySafeCritical] 
[ResourceExposure(ResourceScope.None)] 
[MethodImplAttribute(MethodImplOptions.InternalCall)] 
private static extern void ReliableEnterTimeout(Object obj, int timeout, ref bool lockTaken); 

किसी को भी पता है इस समारोह करता है या क्या Monitor.Enter के सामान्य तंत्र क्या है? यह कैसे पता चलता है कि कौन सी ऑब्जेक्ट लॉक हैं?

+0

संभावित डुप्लिकेट [सिस्टम कैसे पढ़ता है। मॉनिटर.इंटर() काम करता है?] (Http://stackoverflow.com/questions/6770815/how-does- सिस्टम- थ्रेडिंग- मॉनिटर-enter-work) – gdoron

उत्तर

11

यह कैसे जान लेता है कि जो वस्तुओं को बंद कर दिया जाता है?

.NET में प्रत्येक ऑब्जेक्ट में दो अतिरिक्त (छुपा .. आप उन्हें नहीं देख सकते) ओवरहेड सदस्य हैं।

  • ए "ऑब्जेक्ट पॉइंटर टाइप करें"। यह ऑब्जेक्ट के Type उदाहरण का संदर्भ है। वास्तव में, आप GetType() पर कॉल करके इसे "एक्सेस" कर सकते हैं।
  • एक "सिंक ब्लॉक इंडेक्स"। यह एक मूल शब्द आकार अभिन्न प्रकार है जो सीएलआर की "सिंक ब्लॉक" की आंतरिक सरणी में एक सूचकांक है।

सिंक ब्लॉक संरचना में एक फ़ील्ड है जिसे लॉक करने के लिए चिह्नित किया जा सकता है। असल में, जब आप किसी ऑब्जेक्ट को लॉक करते हैं, तो यह फ़ील्ड चालू हो जाता है। जब ताला जारी की है, यह बंद है (मूल रूप से - मैं SSCLI पर काफी देर तक कैसे आपरेशन के उस तरह से काम करता है में गहरा गड्ढा करने के लिए ध्यान दिया है नहीं - मेरा मानना ​​है कि यह EnterCriticalSection पर हालांकि आधारित है ..)।

MethodImplOptions.InternalCall तर्क जो आपने ऊपर दिए गए गुण को पारित किया है, इसका मतलब है कि उस विधि का वास्तविक कार्यान्वयन सीएलआर में रहता है .. यही कारण है कि आप कोड के माध्यम से आगे ब्राउज़ नहीं कर सकते हैं।

+0

धन्यवाद , मैंने उन पंक्तियों के साथ कुछ सुना लेकिन system.object में कोई फ़ील्ड नहीं देख सका। क्या आप जानते हैं कि मुझे इसके बारे में और जानकारी कहां मिल सकती है? अधिकतर –

+0

पुस्तकें। उस पर सी # छूता है के माध्यम से CLR .. प्रो नेट प्रदर्शन सिर्फ उस पर एक पेज के ऊपर है .. साझा स्रोत CLI (रोटर) यह के एक कार्यान्वयन .. है और है कि जहां ('ReliableEnterTimeout' के एक कार्यान्वयन मिलेगा एसएससीएलआई उन कार्यों को आंतरिक रूप से अन्य लोगों के नाम पर नक्शा देता है। यदि आप इसकी तलाश करते हैं, तो "विश्वसनीय एन्टरटाइमआउट" की खोज करें और देखें कि यह किस मानचित्र पर है)। यह भी (हालांकि मैं के लिए मुझे के जीवन याद नहीं कर सकते क्या है कि संरचना कहा जाता था) एक सिंक ब्लॉक कार्यान्वयन है। –

+0

शायद भी WinAPI समारोह 'EnterCriticalSection' पर गौर .. मेरा मानना ​​है कि SSCLI ताला तंत्र के कुछ हिस्से के लिए (Windows पर वैसे भी) है कि इस्तेमाल करता है। –

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