मैं मॉनिटर को कर्नेल-मोड/कर्नेल सिंक ऑब्जेक्ट का उपयोग करने के लिए सभी संभावित स्थितियों की एक सूची संकलित करना चाहता हूं।जब बिल्कुल .NET मॉनिटर कर्नेल-मोड पर जाता है?
सिंक ब्लॉक में कर्नेल ऑब्जेक्ट को संदर्भित करने के लिए एक फ़ील्ड है इसलिए मैंने कटौती की है कि lock
कभी-कभी कर्नेल-मोड पर जाएगा। Lock (Monitor) internal implementation in .NET
लेकिन यह जवाब देना ज्यादा सवाल है और केवल उपयोगी जानकारी है कि ओपी बस करते हुए कहा कि lock
कुछ समय कर्नेल-मोड के लिए जाना जाएगा द्वारा अपने ही सवाल का जवाब है:
मैं इस पाया। इसके उत्तर देने के लिए कुछ भी करने के लिए कोई लिंक नहीं है।
मेरा प्रश्न अलग है - मैं जानना चाहता हूं कि वास्तव में lock
कर्नेल-मोड पर जायेगा (यदि नहीं और क्यों नहीं - कब)।
मैं अगर वहाँ पुराने संस्करणों के साथ किसी भी अंतर नहीं है के बारे में नेट 4 और 4.5 सुनने के लिए अधिक दिलचस्पी
संपादित करें: रिक्टर पुस्तक से: "एक सिंक ब्लॉक कर्नेल वस्तु के लिए फ़ील्ड हैं, थ्रेड की आईडी, एक रिकर्सन गिनती, और एक प्रतीक्षा थ्रेड गिनती का मालिक है। "
आपको बहुत बहुत धन्यवाद। खासकर एसएससीएलआई के लिए - मुझे नहीं पता था कि यह सार्वजनिक रूप से उपलब्ध था। –
टिप्पणी के लिए धन्यवाद जो मुझे सीएलआर स्रोत में प्रासंगिक भाग के लिए इंगित करता है। मैं विशेष रूप से कताई भाग में रूचि रखता हूं: यह आमतौर पर कर्नेल जाने से पहले पहले स्पिन पर मॉनीटर का दावा किया जाता है। और मुझे दिलचस्पी है कि यह वास्तव में कैसे स्पिन करता है (पुनरावृत्तियों की संख्या, ...)। मैं आपके द्वारा वर्णित कोड पथ में कताई नहीं देख पा रहा हूं, हालांकि, मैं AwareLock :: कथन द्वारा AwareLock :: TryEnter द्वारा कताई तर्क में कताई तर्क देखता हूं। अब ऐसा लगता है कि यह टाइमआउट का उपयोग होने पर TryEnter के लिए ही लागू होता है, इसलिए मुझे लगता है कि सी # लॉक कीवर्ड का उपयोग करते समय कताई का उपयोग नहीं किया जाता है। क्या मैं सही हू? –