.net - Checking whether the current thread owns a lock -


मान लीजिए मेरे पास निम्न कोड है:

  सार्वजनिक वर्ग SomeClass () {निजी रीडोनली ऑब्जेक्ट _lock = नया ऑब्जेक्ट (); सार्वजनिक शून्य कुछ MethodA () {ताला (_lock) {SomeHelperMethod (); // कुछ ऐसा है जिसे _lock पर लॉक की आवश्यकता है}} सार्वजनिक शून्य SomeMethodB () {ताला (_ लॉक) {SomeHelperMethod (); // कुछ ऐसा है जो _lock पर लॉक की आवश्यकता है}} निजी शून्य कुछ हेलपरमथ () {ताला (_ लॉक) {// कुछ ऐसा है जो लॉक पर लॉक की आवश्यकता है}}}  

अंदर लॉक करना कुछ हाल्परम विधि बेमानी और बेकार लगता है, क्योंकि सभी कॉल करने वाले ने पहले से लॉक लिया है हालांकि, बस SomeHelperMethod से लॉक को हटाना खतरनाक लगता है क्योंकि हम बाद में कोड रिफ्लेक्ट कर सकते हैं और _lock ऑब्जेक्ट को SomeHelperMethod कॉल करने से पहले लॉक करना भूल जाते हैं।

आदर्श रूप से मैं इस पर जोर देकर कह सकता हूं कि वर्तमान धागा _lock के अंदर SomeHelperMethod पर ताला रखता है:

  प्राइवेट व्हॉयड SomeHelperMethod () {Debug.Assert (मॉनिटर। HasLock (_lock)); // कुछ ऐसा है जिसे लॉक पर लॉक की आवश्यकता होती है)  

लेकिन ऐसा कोई तरीका नहीं दिखता है मॉनिटर। TryEnter करता है नहीं मदद क्योंकि ताले फिर से प्रवेश कर रहे हैं इसलिए, यदि वर्तमान धागा पहले से ही ताला रखता है, तो TryEnter भी सफल होगा और वापस true होगा एकमात्र समय यह असफल हो जायेगा, अगर कोई दूसरा धागा ताला और कॉल के समय का मालिक है।

तो क्या ऐसा पद्धति मौजूद है? यदि नहीं, तो क्यों? यह बिल्कुल भी खतरनाक नहीं लगता है, क्योंकि यह केवल आपको बताता है कि वर्तमान धागा (कोई दूसरा धागा) लॉक नहीं है या नहीं।

यह .net 4.5 का उपयोग करके समर्थित है।


Comments