निम्नलिखित वर्ग को देखते हुए:एकाधिक लॉक ऑब्जेक्ट्स आवश्यक हैं?
class x
{
Object lockOne = new Object();
Object lockTwo = new Object();
List<Something> listOne = new List<Something>();
List<Something> listTwo = new List<Something>();
void MethodOne()
{
lock(lockOne)
{
// some operation on listOne
}
}
void MethodTwo()
{
lock(lockTwo)
{
// some operation on listTwo
}
}
}
यह सही दो ताला लगा यह सोचते हैं कि MethodOne()
और MethodTwo()
अलग धागे समवर्ती यह देखते हुए कि listOne
और listTwo
में वैसे भी संबंधित नहीं हैं से कहा जा सकता है वस्तुओं का उपयोग करने के है। ताले में शामिल एकमात्र ऑपरेशन ऊपर दी गई टिप्पणियों में निर्दिष्ट हैं।
यह ताला बंटवारे को फोन किया और एक अच्छा विवाद को कम करने के लिए यदि दो वस्तुओं और तरीके हैं जिस तरह से है: निम्नलिखित कोड कम कोड, कम भूमि के ऊपर और गलती से गलत ताला का उपयोग करने का कम मौका, बस के रूप में अच्छी तरह से काम करेगा स्वतंत्र। – assylias
यह सामान्य ज्ञान कहा जाता है किया जाना चाहिए, यह कर दूसरा रास्ता चारों ओर एक बहुत बुरा व्यवहार है। – Dariusz
एक बात आप में देखने के लिए चाहते हो सकता है एक [ReaderWriterLock] (http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx) का उपयोग किया गया है। आप केवल सूची से पढ़ रहे हैं यह एक से अधिक थ्रेड ('List' सुरक्षित थ्रेड पढ़ता है) एक ही बार में इसका इस्तेमाल करने की अनुमति देता है, एक बार आप आप ताला और फिर सिर्फ एक ही धागे में लिख सकते हैं उन्नयन और सभी पाठकों ब्लॉक किए गए हैं लिखने के लिए की जरूरत है, इसके बाद कई पाठक फिर से शुरू कर सकते हैं। –