मान लीजिए कि मैं एकाधिक धागे से DataTable
तक पहुंच रहा हूं। अगर मैं एक विशेष पंक्ति का उपयोग करना चाहते हैं, मैं मुझे लगता है कि आपरेशन लॉक करने की आवश्यकता पर शक (मैं इस बारे में गलत हो सकता है, लेकिन कम से कम मैं इस तरह से मैं सुरक्षित हूँ पता है):यदि मैं डेटारो अपडेट कर रहा हूं, तो क्या मैं संपूर्ण डेटाटेबल या केवल डेटारो लॉक करता हूं?
// this is a strongly-typed table
OrdersRow row = null;
lock (orderTable.Rows.SyncRoot) {
row = orderTable.FindByOrderId(myOrderId);
}
लेकिन फिर भी, अगर मैं उस पंक्ति को अपडेट करना चाहते हैं, क्या मुझे तालिका को लॉक करना चाहिए (या बल्कि, तालिका का Rows.SyncRoot
ऑब्जेक्ट) फिर से, या क्या मैं बस पंक्ति को लॉक कर सकता हूं?
बहुत अंतर्दृष्टिपूर्ण उत्तर, और मैं देख सकता हूं कि आपको 'लॉक' तंत्र कैसे काम करता है यह इंगित करने की आवश्यकता क्यों महसूस हुई ... मुझे पता चला कि लॉकिंग किसी ऑब्जेक्ट को * * ऑब्जेक्ट नहीं करता है; मुझे लगता है कि एक बेहतर तरीका मैंने अपना प्रश्न लिखा होगा "क्या मुझे अद्यतन ऑपरेशन प्रति पंक्ति या प्रति-तालिका सिंक्रनाइज़ करने की आवश्यकता है?" किसी भी मामले में, यह इस बिंदु पर मुझे स्पष्ट है कि मुझे पूरी तालिका में * किसी * पंक्ति में अपडेट सिंक्रनाइज़ करना होगा - चाहे तालिका को लॉक करके या समर्पित "टेबल लॉक" (इस मामले में, मुझे लगता है कि 'पंक्तियां। SyncRoot' ऑब्जेक्ट उस उद्देश्य को वास्तव में अच्छी तरह से सेवा देता है)। –