मैं एक सी # एप में "बॉक्स किए गए" ऑब्जेक्ट को लॉक करने का प्रयास कर रहा हूं, क्या यह संभव नहीं है?सी # थ्रेडिंग - लॉक ऑब्जेक्ट
Thread b1 = new Thread(new ThreadStart(t1.w));
b1.Start();
Thread b2 = new Thread(new ThreadStart(t1.w));
b2.Start();
हालांकि भाग अवरोधित नहीं है:
class t
{
System.Object t_x = new object();
public t(int p)
{
t_x = p;
}
public void w()
{
lock (t_x)
{
for (int i = 0; i < 4; i++)
{
{
t_x = ((int)t_x) + 1;
Console.WriteLine(t_x);
Thread.Sleep(1000);
}
}
}
}
}
अन्य वर्ग में मैं 2 धागे शुरू कर सकते हैं। जब मैं एक मनमानी वस्तु को लॉक करता हूं (यानी ऑब्जेक्ट ए = नई ऑब्जेक्ट() के रूप में निर्मित और संशोधित नहीं किया जाता है तो यह अच्छी तरह से लॉक हो जाता है। मुक्केबाजी ऑपरेशन किसी भी तरह से मेरे ऑब्जेक्ट "depromotes" है ??
आप एक ताला ब्लॉक के भीतर ताला वस्तु क्यों पुन: असाइन हैं? यह उद्देश्य को हरा देता है - चूंकि सिंक्रनाइज़ेशन का पूरा बिंदु एक "साझा" संसाधन के लिए एक-दूसरे को ट्रामल करने से अलग धागे से बचने के लिए है। – Gishu
मुझे लगता है कि उत्तर स्वीकार किया गया है कि यह अच्छा नहीं है –
कम अनुभवी प्रयासों के बीच एक पुनरावर्ती गलत नामक प्रतीत होता है। नेट थ्रेडिंग कि लॉक स्टेटमेंट वास्तव में "ताले" या उस ऑब्जेक्ट की सुरक्षा करता है जिस पर ताला कहा जाता है। वे इस तथ्य को याद करते हैं कि ऑब्जेक्ट वास्तव में कोड के लॉक ब्लॉक, महत्वपूर्ण खंड की कुंजी है। –