कारण है कि यह अच्छी तरह से परिभाषित किया गया है व्यवहार की व्याख्या करने के लिए और असफल कभी नहीं होगा:
एक तरफ: This answer has better details about how locks actually work
ताला, Thread
स्तर पर होता है तो यह बुला ही धागे पर दूसरी बार निरर्थक हो जाएगा । मुझे लगता है कि इसमें कोई प्रदर्शन जुर्माना नहीं होगा (हालांकि यह इस बात पर निर्भर करेगा कि नेट के आंतरिक वास्तव में कैसे लिखा गया है, इसलिए मैं इसकी गारंटी नहीं दे सकता)
कई बार आपके पास एक सार्वजनिक कार्य होता है जो दूसरे को कॉल करता है आपकी कक्षा में सार्वजनिक कार्य, जिन्हें अलग-अलग उपयोग करते समय लॉक की आवश्यकता होती है। यदि इसकी अनुमति नहीं थी तो निम्नलिखित विफल हो जाएंगे:
private Dictionary<string, int> database = new Dictionary<string, int>();
private object databaseLock = new object();
public void AddOrUpdate(string item)
{
lock (databaseLock)
{
if (Exists(item))
database.Add(item, 1);
else
++database[item];
}
}
public bool Exists(string item)
{
lock (databaseLock)
{
//... Maybe some pre-processing of the key or item...
return database.ContainsKey(item);
}
}
आप ऐसे निर्माण का उपयोग क्यों करना चाहते हैं? – Jehof
क्या आप कुछ ऐसी स्थिति का वर्णन कर सकते हैं जहां आपको ऐसा करने की आवश्यकता होगी? मैं इसे समझने की कोशिश कर रहा हूं, लेकिन ..? –
@ MatíasFidemraizer एक पुनरावर्ती फ़ंक्शन एक ही संसाधन को लॉक कर सकता है। –