मैंने एक परीक्षण लिखा है जो मुझे लगता है कि डेडलॉक के लिए एक वैध मामला होना चाहिए। ऐसा प्रतीत होता है कि एक बार lock
को कक्षा के एक उदाहरण से अधिग्रहित किया गया है, तो उस उदाहरण को lock
को फिर से हासिल करने की आवश्यकता नहीं है, भले ही मैं स्पष्ट रूप से lock
को दूसरी विधि को कॉल करने का प्रयास करता हूं।ब्लॉक को लॉक करने के लिए लॉक किए गए और आगे के प्रयासों को लॉक करें: क्या सी # लॉक फिर से प्रवेश कर रहे हैं?
यहाँ वर्ग है:
internal class Tester
{
private readonly object _sync = new object();
public Tester() { }
public void TestLock()
{
lock (_sync)
{
for (int i = 0; i < 10; i++)
{
Deadlock(i);
}
}
}
private void Deadlock(int i)
{
lock (_sync)
{
Trace.WriteLine(i + " no deadlock!");
}
}
}
आउटपुट:
0 कोई गतिरोध!
1 कोई डेडलॉक नहीं!
2 कोई डेडलॉक नहीं!
3 कोई डेडलॉक नहीं!
4 कोई डेडलॉक नहीं!
5 कोई डेडलॉक नहीं!
6 कोई डेडलॉक नहीं!
7 कोई डेडलॉक नहीं!
8 कोई डेडलॉक नहीं!
9 कोई डेडलॉक नहीं!
मैंने सोचा होगा कि इससे डेडलॉक होगा ... क्या कोई इस पर कुछ प्रकाश डाल सकता है?
मैं मल्टीथ्रेडिंग के साथ बहुत सहज हूं, लेकिन मुझे लगता है कि मुझे कभी एहसास नहीं हुआ कि सी # ताले फिर से प्रवेश कर रहे हैं। उत्तर के लिए धन्यवाद ... – Kiril