2012-06-12 15 views
5

क्या मैं सही हूं कि एक विधि को दो बार निष्पादित करने से रोकने का एकमात्र तरीका lock कथन का उपयोग कर रहा है?एक ही समय में विभिन्न धागे से निष्पादित करने से विधि को रोकें

private object lockMethod = new object(); 

public void Method() { 
    lock (lockMethod) { 
     // work 
    } 
} 

public void FromThread1() { 
    Method(); 
} 

public void FromThread2() { 
    Method(); 
} 
बेशक

मैं भी MethodImpl(MethodImplOptions.Synchronized) क्या लगभग एक ही हो सकता है का उपयोग कर सकते हैं।

क्या अन्य तकनीकें हैं?

+7

मुझे थोड़ा चिंता है कि आप _data_ को लॉक करने के बजाय _method_ लॉक करने का प्रयास कर रहे हैं - आप किस समस्या को हल करने की कोशिश कर रहे हैं? – sarnold

+0

चूंकि आप कोई 'स्थिर' विधियां नहीं दिखाते हैं, तो क्या आप वास्तव में एक ही उदाहरण के लिए दो बार एक विधि को निष्पादित करने से रोकने की कोशिश कर रहे हैं? या एक ही समय में एक ही उदाहरण के लिए किसी भी दो तरीकों? – HABO

+0

विधि इतनी छोटी है कि मेरी स्थिति में विधि को लॉक करना = डेटा लॉक करना – javapowered

उत्तर

9

क्या मैं सही हूं कि एक ही समय में दो बार निष्पादित करने की विधि को रोकने के लिए एकमात्र तरीका लॉक स्टेटमेंट का उपयोग कर रहा है?

नहीं, लेकिन यह "मानक" तरीका है, और शायद सबसे अच्छा है। ऐसा कहा जा रहा है कि, आमतौर पर आप विशिष्ट डेटा तक पहुंच को सिंक्रनाइज़ करने के लिए लॉक का उपयोग करेंगे, पूरी तरह से विधि के अनुसार नहीं। एक पूरी विधि को लॉक करने से संभावित रूप से आवश्यक अवरोध हो सकता है।

अन्य तरीकों का सवाल है, System.Threading नाम स्थान कई अन्य ReaderWriterLockSlim, Semaphore, Mutex, सहित विभिन्न रूपों में तुल्यकालन के लिए इस्तेमाल किया प्रकार, शामिल Monitor class (जो क्या lock आंतरिक रूप से उपयोग करता है), आदि सभी डेटा सिंक्रनाइज़ करने के लिए विभिन्न तरीके प्रदान करते हैं हालांकि, प्रत्येक एक अलग परिदृश्य के लिए तैयार है। इस मामले में, lock उपयोग करने के लिए उपयुक्त तरीका है।

संबंधित मुद्दे

 संबंधित मुद्दे