मेरे पास सी # में एक स्थिति है जहां मेरे पास सरल प्रकार की एक सूची है। इस सूची को एकाधिक धागे से एक्सेस किया जा सकता है: प्रविष्टियों को जोड़ा या हटाया जा सकता है, और एक प्रविष्टि का अस्तित्व चेक किया जा सकता है। मैंने अभी तक उन तीन परिचालनों को उजागर करने वाली किसी ऑब्जेक्ट में सूची को समाहित किया है।सी # समवर्ती सूची प्रश्न
मेरे पास कुछ मामलों को संभालने के लिए हैं (ठीक उसी तरीके के जैसा नहीं जो मैंने अभी उल्लेख किया है)।
1. एक धागा सिर्फ एक प्रविष्टि के अस्तित्व की जांच कर सकता है। (सरल)
2. एक धागा एक प्रविष्टि के अस्तित्व की जांच कर सकता है, और यदि यह अस्तित्व में नहीं है, तो इसे जोड़ें।
3. एक थ्रेड को जांचने की आवश्यकता है कि कोई प्रविष्टि मौजूद है या नहीं, और यदि ऐसा होता है, तो इसे हटाए जाने तक प्रतीक्षा करें।
4. 2 और 3 का संयोजन, जहां एक थ्रेड एक प्रविष्टि के अस्तित्व के लिए जांचता है, यदि यह अस्तित्व में है, तो इसे तब तक प्रतीक्षा करनी चाहिए जब तक इसे हटाया न जाए।
पूरा विचार यह है कि एक प्रविष्टि का अस्तित्व लॉक को दर्शाता है। यदि कोई प्रविष्टि मौजूद है, तो जिस वस्तु को पहचानता है उसे बदला नहीं जा सकता है और कोड आगे नहीं बढ़ सकता है क्योंकि इसे कहीं और संशोधित किया जा रहा है।
ये सरल नौसिखिया परिस्थितियों की तरह लग सकते हैं लेकिन मैं खुद को समेकन के मुद्दों पर ताज़ा कर रहा हूं और यह मुझे थोड़ा पागल बना रहा है, और मैं सी # की समवर्ती तंत्र से भी परिचित नहीं हूं।
इसे संभालने का सबसे अच्छा तरीका क्या होगा? क्या मैं पूरी तरह से बंद हूँ? जांच और जोड़ना चाहिए (परीक्षण और सेट?) चौथे परमाणु ऑपरेशन में संयुक्त किया जाना चाहिए? क्या मैं बस अपनी विधियों में लॉक ब्लॉक जोड़ रहा हूं जहां सूची का उपयोग किया जाता है?
इसके अलावा, क्या इस तरह की चीज का परीक्षण करना संभव है (सरल संचालन, समवर्ती परिस्थितियों में नहीं)?
+1 है, मैं एक ऐसी ही समाधान के लिए आया था, लेकिन HashSet इसे और अधिक कुशल बनाता है। नेस्टेड ताले आदि का उपयोग करते हुए मॉनीटर क्लास के लिए अच्छा डेमो इत्यादि। जब कोई आइटम हटा दिया जाता है तो समस्या केवल 'स्टैम्पडे' हो सकती है। –