हां, आप उसी लॉक ऑब्जेक्ट का उपयोग कर सकते हैं (यह तकनीकी रूप से monitor कंप्यूटर विज्ञान अर्थ में है, और दो अलग-अलग तरीकों से System.Monitor में विधियों के लिए कॉल के साथ लागू किया गया है)।
तो, कहें कि आपके पास कुछ स्थिर संसाधन r
था, और आप उस संसाधन तक पहुंचने के लिए दो थ्रेड चाहते थे, लेकिन एक ही समय में केवल एक थ्रेड इसका उपयोग कर सकता है (यह लॉक का क्लासिक लक्ष्य है)। तो फिर तुम,
public class Foo
{
private static object _LOCK = new object();
public void Method1()
{
lock (_LOCK)
{
// Use resource r
}
}
public void Method2()
{
lock (_LOCK)
{
// Use resource r
}
}
}
आप अपने कार्यक्रम में r
के हर उपयोग के आसपास लॉक करने की आवश्यकता की तरह कोड लिखने के बाद से अन्यथा दो धागे एक ही समय में r
का उपयोग कर सकते हैं। इसके अलावा, आपको एक ही लॉक का उपयोग करना होगा, क्योंकि अन्यथा दो धागे एक ही समय में r
का उपयोग करने में सक्षम होंगे। इसलिए, यदि आप दो अलग-अलग तरीकों से r
का उपयोग कर रहे हैं, तो आप दोनों विधियों से एक ही लॉक का उपयोग करना चाहिए।
संपादित करें: @diev टिप्पणी में बताते हैं के रूप में, यदि संसाधन प्रकार Foo
की वस्तुओं पर प्रति-उदाहरण थे, हम _LOCK
स्थिर नहीं होगा, लेकिन _LOCK
उदाहरण स्तर के डेटा होगा।
स्रोत
2012-02-23 00:02:37
+1 "उपयोग" को ढूंढने के लिए +1! –
मेरा बुरा। मैं लॉक कहना चाहता था (lockObject) – RedFox
आपको स्पष्ट रूप से इस तथ्य को कॉल करना चाहिए कि लॉक ऑब्जेक्ट 'स्थैतिक' है, और इस प्रकार संसाधन जो इसे संरक्षित कर रहा है वह भी 'स्थिर' होना चाहिए; यदि आर उदाहरण के स्तर पर संसाधन उपलब्ध था, तो एक उदाहरण स्तर लॉक ऑब्जेक्ट शायद बेहतर काम करेगा। – dlev