जारी करते समय लॉक जारी करते समय मुझे सिंक्रनाइज़ेशन लॉक अपवाद प्राप्त होता है।सिंक्रनाइज़ेशन लॉकएक्सप्शन (ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के असीमित ब्लॉक से बुलाया गया था।) लॉक
बेशक, पहली चीज मैंने समस्या पर Google खोज की थी। मुझे दो मुख्य ग़लत पैटर्न मिले:
- इसे बनाने से अलग थ्रेड पर एक म्यूटेक्स जारी करना।
- मॉनिटर के लिए एक सिंक्रनाइज़ेशन ऑब्जेक्ट के रूप में मान प्रकार का उपयोग करना। या मॉनिटर को घुमाने और निकालने के बीच सिंक्रनाइज़ेशन ऑब्जेक्ट को संशोधित करना।
समस्या यह है कि इनमें से कोई भी पैटर्न मेरे मामले में फिट बैठता है।
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 कार्यान्वयन ने इस अपवाद को फेंक दिया।
धन्यवाद।
स्टैक ट्रेस क्या है? – SLaks
अप्रबंधित कोड के कारण ढेर भ्रष्टाचार हमेशा एक संभावना है। आपके प्रश्न में कुछ भी नहीं है जो सुझाव देगा कि यह बिल्कुल भी संभव है। –
ऑब्जेक्ट सिंक्रनाइज़ेशन विधि को कोड के एक सिंक्रनाइज़ किए गए ब्लॉक से बुलाया गया था। 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