में लॉक स्कोप के लिए एकाधिक चर का उपयोग कैसे करें मेरे पास ऐसी स्थिति है जहां दो लॉकर ऑब्जेक्ट्स मुक्त होने पर कोड का एक ब्लॉक निष्पादित किया जाना चाहिए।सी #
मैं वहाँ उम्मीद थी होगा कुछ की तरह:
lock(a,b)
{
// this scope is in critical region
}
हालांकि, वहाँ ऐसा कुछ नहीं हो रहा है। तो इसका मतलब यह है कि ऐसा करने का एकमात्र तरीका यह है:
lock(a)
{
lock(b)
{
// this scope is in critical region
}
}
क्या यह अपेक्षा के अनुसार भी काम करेगा? यद्यपि कोड संकलित करता है, लेकिन मुझे यकीन नहीं है कि यह वह हासिल करेगा जो मैं उम्मीद कर रहा हूं।
इस कारण लॉक समस्याएं नहीं हो सका? एक ऑब्जेक्ट लॉक करता है, और एक और लॉक बी, अब आपके पास एक डेडलॉक होगा जहां ऑब्जेक्ट 1 बी और ऑब्जेक्ट 2 ब्लॉक के लिए प्रतीक्षा कर रहा है। मैं ताले से परिचित नहीं हूं, लेकिन यह बुरा लगता है। – Tester101
यही कारण है कि लॉकिंग ऑर्डर महत्वपूर्ण है, क्योंकि अब तक के सभी उत्तरों का उल्लेख किया गया है। कभी-कभी आपको कई ताले रखने की आवश्यकता होती है, और उन मामलों में उपयोग करने के लिए मानक पैटर्न में से एक ताले पर ऑर्डर करने के लिए (कम से कम सम्मेलन के माध्यम से) लागू करना है। उदाहरण के लिए, आप कहेंगे कि जब भी आप लॉक प्राप्त करना चाहते हैं तो * आपको पहले लॉक प्राप्त करना होगा।अधिक विवाद का कारण बनता है, लेकिन deadlocks को रोकता है। जब संभव हो तो इस तरह की चीज़ से बचने के लिए हमेशा बेहतर होता है, लेकिन कभी-कभी यह आवश्यक है। – Herms
@ परीक्षक 101: हाँ मुझे पता है कि अगर सही ढंग से संभाला नहीं जाता है, तो यह डेडलॉक का कारण बन जाएगा। –