थ्रेड सुरक्षा को संरक्षित करते समय हम एकाधिक समवर्ती डेटा संरचनाओं तक कैसे पहुंच सकते हैं? सिंक्रनाइज़ेशन के बिना ऐसा करना संभव है?एकाधिक समवर्ती डेटा संरचनाओं के लिए थ्रेड-सुरक्षित पहुंच
एक साधारण उदाहरण के रूप में:
ConcurrentHashmap m;
CopyOnWriteArrayList l;
public bool enterListNode(int elem) {
Node node = l.get(elem);
String key = node.key(); //key is immutable
int val = node.val(); //val is immutable
val = m.putIfAbsent(key, val);
return val;
}
यह उदाहरण linearizable नहीं है, क्योंकि यह संभव है हम करते हैं जब कि putIfAbsent(key, val)
, कि (node==l.get(elem))
अब सच है।
क्या लॉक जोड़ने के अलावा इस से निपटने का कोई तरीका है?
यह एक अच्छा सवाल है जो बाह्य स्रोतों (यानी उदाहरण) के लिए पूछने के कारण खतरनाक रूप से ऑफ-विषय के करीब स्कर्ट कर रहा था। मैंने उस समस्या से बचने के लिए इसे दोहराया है। यदि आप महसूस करते हैं कि यह बहुत अधिक परिवर्तन है तो आप वापस या संपादित कर सकते हैं। आप [सहायता] की समीक्षा करना और पॉइंटर्स के लिए [पूछना] पढ़ना चाहेंगे। इस विशिष्ट उदाहरण के लिए –
, जैसा कि आपने कहा है, यह गारंटी देने के लिए आपको गारंटी देने वाली गारंटी के आधार पर पूरी तरह से काम नहीं करता है (यानी यह ठीक हो सकता है अगर एम थोड़ा पीछे है)। सामान्य मामले में, आप वास्तव में इस प्रश्न का उत्तर नहीं दे सकते हैं। – jtahlborn