lock(this)
"वर्तमान" वस्तु पर लॉक हो जाएगा विशेष रूप से खराब है।
"यह" पर लॉक करना आमतौर पर एक बुरा विचार है क्योंकि यह अन्य कोड को लॉक का खुलासा करता है; मैं एक केवल पढ़ने के लिए क्षेत्र के लिए पसंद करते हैं, इस तरह:
public class Foo
{
private readonly object padlock = new object();
public void SomeMethod()
{
lock(padlock)
{
...
}
}
}
इस तरह SomeMethod
(और Foo
जो padlock
पर ताले में कुछ और) के लिए सभी कॉल Foo
का एक ही उदाहरण के लिए एक ही मॉनीटर पर लॉक हो जाएगा, लेकिन कुछ भी अन्य उस मॉनीटर पर लॉक करके हस्तक्षेप कर सकते हैं।
हकीकत में, जब तक कि आप "धूर्त" कोड के साथ काम कर रहे हैं, यह संभावना नहीं है कि अन्य कोड वास्तव में Foo
का एक उदाहरण के संदर्भ पर लॉक हो जाएगा, लेकिन यह कैप्सूलीकरण की बात है।
स्रोत
2010-02-23 15:29:14
कमजोर पहचान ताले के बारे में अच्छा बिंदु। –