मेरे पास एक ऐसा एप्लिकेशन है जहां मैं एकाधिक धागे को एक सूची पढ़ने के लिए चाहता हूं। मैं समय-समय पर नए डेटा के साथ सूची अद्यतन करना चाहता हूं। जब सूची अपडेट की जाती है, तो मुझे लगता है कि मैं एक नई सूची बना सकता हूं और इसे पुराने के साथ बदल सकता हूं। उदाहरण:सी # मल्टीथ्रेडेड अनुप्रयोग में परिवर्तनीय संदर्भ को स्वैप करते समय लॉकिंग आवश्यक है
private List<string> _list = new List<string>();
private void UpdateList()
{
var newList = new List<string>(QueryList(...));
_list = newList;
}
private void ThreadRun()
{
foreach (var item in _list)
{
// process item...
}
}
अद्यतन सूची विधि में, एक नई सूची बनाई गई है और _list संदर्भ नई सूची के साथ बदल दिया गया है। मेरी सोच से, कोई भी मौजूदा धागा अभी भी पुरानी सूची (जो मेरे लिए ठीक है) का संदर्भ रखेगा, कोई भी नया धागा नई सूची उठाएगा। आखिरकार, सभी धागे खत्म हो जाएंगे और पुरानी सूची अंततः कचरा एकत्र की जाएगी। क्या इस कोड में कोई लॉकिंग आवश्यक है, या क्या मुझे कुछ भी सुरक्षित बहु-थ्रेडेड एक्सेस सुनिश्चित करने के लिए देखभाल करने की आवश्यकता है?
'क्वेरी लिस्ट' क्या करता है? '_list' के तत्व कभी भी एक अलग थ्रेड (जोड़ा या हटाया गया) द्वारा संशोधित हैं? – Groo
dQueryList बस स्ट्रिंग का संग्रह देता है। मैंने जानबूझकर दिखाया कि एक नई सूची बनाई गई है, यह दिखाने के लिए कि सूची कभी मोहित नहीं हुई है। – Mas