ऐसी स्थितियां हैं कि एक ही धागे पर घोंसले के घोंसले की क्षमता बहुत व्यावहारिक है।
मान लीजिए कि आपके पास कई विधियों वाला एक वर्ग है। मान लीजिए आप इस तरह एक बहुत ही सरल ताला योजना करना चाहते हैं:
class A
{
public void MethodOne()
{
using (locker)
{
...body...
}
}
public void MethodTwo()
{
using (locker)
{
...body...
}
}
}
अब, अगर MethodOne
कॉल MethodTwo
, आप MethodTwo
की शुरुआत में एक गतिरोध के लिए होता है, अगर वहाँ की निगरानी में एक रैत्रांत ताला क्षमता नहीं था । थ्रेड ने locker
के माध्यम से खुद को अवरुद्ध कर दिया होगा।
सौभाग्य से, यह उदाहरण सिर्फ .NET में काम करता है। लॉकर "जानता है" किस धागे ने इसे बंद कर दिया है और कितनी बार और यह केवल (केवल) मालिक के धागे को चलेगा। गिनती का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि अन्य प्रतीक्षा धागे के परिप्रेक्ष्य से अनलॉक केवल MethodTwo
से बाहर निकलने के बजाय MethodOne
से बाहर निकलने पर ही होता है। तो यह उपयोगी नेस्टेड लॉकिंग का एक उदाहरण है।
दूसरी ओर, उदाहरण के प्रश्न में आपका उल्लेख this book से आते हैं लगता है। लेखक यह स्पष्ट करना चाहते थे कि नेस्टेड लॉकिंग संभव है।नेट, स्वचालित रूप से; लेकिन उनके उदाहरण कोड को विकसित किया गया है और किसी भी कोड में दिखाई देने का इरादा नहीं है जब यह जानने की कोशिश की जा रही है कि लॉकिंग हुड के नीचे कैसे काम करती है।
स्रोत
2012-06-06 07:32:41
क्या आपका मतलब यह है कि हर बार एक ही वस्तु पर लॉक की जांच की जा रही है, या विभिन्न वस्तुओं पर? – Nathan
@Nathan समान obj। –
संबंधित: http://stackoverflow.com/questions/12013089/when-would-you-ever-use-nested-locking –