2012-12-21 28 views
5

जारी करते समय लॉक जारी करते समय मुझे सिंक्रनाइज़ेशन लॉक अपवाद प्राप्त होता है।सिंक्रनाइज़ेशन लॉकएक्सप्शन (ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के असीमित ब्लॉक से बुलाया गया था।) लॉक

बेशक, पहली चीज मैंने समस्या पर Google खोज की थी। मुझे दो मुख्य ग़लत पैटर्न मिले:

  1. इसे बनाने से अलग थ्रेड पर एक म्यूटेक्स जारी करना।
  2. मॉनिटर के लिए एक सिंक्रनाइज़ेशन ऑब्जेक्ट के रूप में मान प्रकार का उपयोग करना। या मॉनिटर को घुमाने और निकालने के बीच सिंक्रनाइज़ेशन ऑब्जेक्ट को संशोधित करना।

समस्या यह है कि इनमें से कोई भी पैटर्न मेरे मामले में फिट बैठता है।

public class MyClass : IDisposable 
{ 
    private readonly object _myLock = new object(); 

    internal void Func1() 
    { 
     lock (_myLock) 
     { 
      //Some code here 
     } 
    } 

    internal void Func2() 
    { 
     lock (_myLock) 
     { 
      //Some code here 
     } 
    } 

    public void Dispose() 
    { 
     lock (_myLock) 
     { 
      //Some code here 
     } // Here is where I get an exception 
    } 
} 

अंततः मैं Dispose() की लाइन जहां ताला जारी की है पर SynchronizationLockException प्राप्त करते हैं:

मैं एक बहुत ही सरल तुल्यकालन परिदृश्य है।

मेरा प्रश्न "मेरे कोड में समस्या क्या है" या "मैं क्या गलत कर रहा हूं" नहीं है। असल में, मैं जानना चाहता हूं कि (और किस परिस्थितियों में) यह संभवतः ऐसा हो सकता है कि लॉक के .NET कार्यान्वयन ने इस अपवाद को फेंक दिया।

धन्यवाद।

+3

स्टैक ट्रेस क्या है? – SLaks

+0

अप्रबंधित कोड के कारण ढेर भ्रष्टाचार हमेशा एक संभावना है। आपके प्रश्न में कुछ भी नहीं है जो सुझाव देगा कि यह बिल्कुल भी संभव है। –

+0

ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के एक सिंक्रनाइज़ किए गए ब्लॉक से बुलाया गया था। CleanupForm.OnBtnRemoveClick (वस्तु प्रेषक, EventArgs ई) पर MyClass.Dispose() पर System.Windows.Forms.Control.OnClick (EventArgs ई) System.Windows.Forms.Button.OnMouseUp पर (MouseEventArgs mevent) पर ... System.Windows.Forms.ButtonBase.WndProc (संदेश एंड एम) System.Windows.Forms.Button.WndProc पर (संदेश एंड एम) पर System.Windows.Forms.Control.ControlNativeWindow.WndProc (संदेश और मीटर) पर System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) – user1921819

उत्तर

0

मुझे एक बार सूची उदाहरण में सिंक्रनाइज़ेशन लॉक अपवाद मिला जब यह नए तत्वों को फिट करने के लिए अपनी अंतर्निहित सरणी का आकार बदल रहा है। सूची उदाहरण को तीन अलग-अलग धागे से एक्सेस किया गया है और एक लॉक गायब था ...

मैं कहूंगा: ट्रिपल चेक अगर आप थ्रेड सिंक्रनाइज़ेशन सही तरीके से कर रहे हैं।

इसके अलावा, IDISposable पैटर्न को सही तरीके से कार्यान्वित करें (http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx देखें)। शायद फाइनेंजर आपको सिरदर्द दे रहा है।