अनन्य लॉक और साझा लॉक के बीच क्या अंतर है?


118

विकिपीडिया के अनुसार,

साझा ताले को कभी-कभी "रीड लॉक" कहा जाता है और अनन्य ताले को कभी-कभी "राइट लॉक" कहा जाता है।

क्या आप "साझा" और "अनन्य" शब्दों के पीछे के तर्क की व्याख्या कर सकते हैं?


क्या गैर-अनन्य लॉक साझा लॉक का दूसरा नाम है?
रमेश पापागंती

जवाबों:


418

मैंने इसका उत्तर नीचे लिखा क्योंकि मुझे लगा कि यह एक मजेदार (और फिटिंग) सादृश्य होगा:

एक शिक्षक (लेखक) और कई छात्रों (पाठकों) से युक्त क्लास रूम में एक ब्लैकबोर्ड (लॉक करने योग्य) के रूप में एक लॉक करने योग्य वस्तु के बारे में सोचें ।

जबकि एक शिक्षक बोर्ड पर कुछ (अनन्य ताला) लिख रहा है:

  1. कोई भी इसे पढ़ नहीं सकता है, क्योंकि यह अभी भी लिखा जा रहा है, और वह आपके विचार को अवरुद्ध कर रहा है => यदि कोई वस्तु विशेष रूप से बंद है, तो साझा ताले प्राप्त नहीं किए जा सकते हैं

  2. अन्य शिक्षक सामने नहीं आएंगे और या तो लिखना शुरू कर देंगे, या बोर्ड अपठनीय हो जाएगा, और छात्रों को भ्रमित करता है => यदि कोई वस्तु विशेष रूप से बंद है, तो अन्य अनन्य ताले प्राप्त नहीं किए जा सकते हैं

जब छात्र पढ़ रहे हैं (ताले साझा किए गए हैं) बोर्ड पर क्या है:

  1. वे सभी पढ़ सकते हैं कि इस पर क्या है, एक साथ => कई साझा ताले सह-अस्तित्व में हो सकते हैं

  2. शिक्षिका उनके पढ़ने का समापन करने से पहले इंतजार करती है कि बोर्ड को और अधिक लिखने के लिए = = यदि एक या अधिक साझा ताले पहले से मौजूद हैं, तो अनन्य ताले प्राप्त नहीं किए जा सकते


2
बहुत अच्छी व्याख्या। हालांकि पीओ ने बाउट को "साझा" और "अनन्य" संप्रदायों की उत्पत्ति के रूप में पूछा , न कि थर्मस के प्रति स्पष्टीकरण के लिए।
सीरियो

क्या यह "यदि एक या अधिक साझा ताले पहले से मौजूद हैं, तो अनन्य ताले प्राप्त नहीं किए जा सकते हैं।" सच हैं? ReentrantReadWriteLock के अंतर? मैंने सोचा कि राइट लॉक किसी भी समय प्राप्त किया जा सकता है, अन्यथा निरंतर पढ़ने के कारण लेखन के लिए भुखमरी हो सकती है।
कानागावेलु सुगुमार

1
@KanagaveluSugumar, हाँ, यह सच है। जब कोई अन्य संस्था पहले से ही एक ही ऑब्जेक्ट पर रीड लॉक रखती है, तो आप केवल राइट लॉक प्राप्त नहीं कर सकते। यह एक पठन-पाठन लॉक का संपूर्ण बिंदु है। यदि आप किसी चीज़ को ओवरराइट करने के लिए होते हैं जबकि कोई और इसे पढ़ रहा है, तो वे क्या पढ़ेंगे? मुझे नहीं पता कि आपने विशेष रूप से "री-एंट्रेंट" रीड-राइट लॉक को चुनने के लिए क्यों चुना, लेकिन री-एंट्रेंस का मतलब है कि फिर से प्रवेश करने वाले लॉक का मालिक फिर से 'लॉक' () कर सकता है और उसके बाद के सभी lock()कॉल पहला तुरंत और सफलतापूर्वक वापस आ जाएगा। यानी आप अपने द्वारा पहले से ही कुछ को सफलतापूर्वक लॉक कर सकते हैं।
अर्जुनशंकर

2
आप यह भी उल्लेख करते हैं कि "मुझे लगा कि राइट लॉक किसी भी समय प्राप्त किया जा सकता है, अन्यथा लिखने के लिए भुखमरी लगातार पढ़ने के कारण हो सकती है" - यह बस नहीं हो सकता। एक राइट लॉक प्राप्त नहीं किया जा सकता है, जबकि कुछ अन्य संस्था पहले से ही रीड / राइट लॉक रखती है। क्या हो सकता है कि यदि कई इकाइयाँ पहले से ही किसी ऑब्जेक्ट को लॉक करने के लिए इंतजार कर रही हैं, तो writerवेटिंग रीडर्स पर एक वेटिंग को प्राथमिकता दी जाती है जब लॉक चुनता है कि लॉक को अगला कौन मिलता है (जब वह अपने वर्तमान मालिक द्वारा अनलॉक किया जाता है)। यह नीति के बारे में है ।
अर्जुनशंकर

धन्यवाद! मैंने ReentrantReadWriteLock को चुना है; चूंकि जावा में ReadWriteLock के लिए कार्यान्वयन वर्ग है। फिर क्या कोई नया झंडा या अधिक प्राथमिकता दी गई है कि आगे पढ़े जाने वाले नए सूत्र कहने के लिए प्रतीक्षा करें कि लिखना कब से शुरू हो रहा है? क्योंकि निरंतर पढ़ने के अनुरोध के कारण लेखन सूत्र की भुखमरी से कैसे बचा जाए?
कनागावेलु सुगुमार

33

यह बहुत सीधा है। पढ़ें ताले को साझा ताले के रूप में भी जाना जाता है क्योंकि एक ही समय में एक से अधिक प्रक्रिया पढ़ सकते हैं। रीड लॉक का बिंदु एक अन्य प्रक्रिया द्वारा राइट लॉक के अधिग्रहण को रोकना है। इसके विपरीत, एक लेखन लॉक अन्य सभी कार्यों को रोकता है जबकि एक लिखित ऑपरेशन पूरा होता है, यही कारण है कि इसे अनन्य रूप में वर्णित किया गया है।

तो एक रीड लॉक कहता है "आप अभी पढ़ सकते हैं लेकिन अगर आप लिखना चाहते हैं तो आपको इंतजार करना होगा" जबकि एक राइट लॉक कहता है "आपको इंतजार करना होगा"।


मुझे लगता है कि आप अपनी पढ़ाई के समर्थन में शोध कर रहे हैं, लेकिन मैं व्याख्यान देने का आग्रह नहीं कर सकता।

लॉकिंग का अक्षम उपयोग प्रदर्शन सिरदर्द का एक प्राथमिक कारण है। एक लॉकिंग सिस्टम का उपयोग जो लॉक को पढ़ता और लिखता है, एक अच्छी शुरुआत है, लेकिन सावधानीपूर्वक डिजाइन कभी-कभी लॉक करने की आवश्यकता को समाप्त कर सकता है। उदाहरण के लिए, सत्र राज्य को प्रति तत्व एक वैश्विक संग्रह में कभी नहीं रखा जाना चाहिए ।

मैंने वास्तव में ऐसा करते देखा है। यह एक अत्याचारी डिजाइन है, जिससे बॉक्सिंग और सत्र राज्य में हर अंतिम परिवर्तन के लिए एक संग्रह में बदलाव होता है, जो एक लम्बी राइट लॉक को बढ़ाता है। ओवरहेड्स अपंग थे, प्रभावी रूप से सर्वर को एकल थ्रेडेड व्यवहार को कम कर रहे थे।

बस सभी सत्र राज्य को एक संरचना में संयोजित करना एक बहुत बड़ा सुधार था। सत्र राज्य में परिवर्तन ने केवल एक सत्र के राज्य संरचना के सदस्यों के मूल्यों को बदल दिया। चूंकि किसी अन्य सत्र में किसी सत्र की स्थिति को सीधे संदर्भित करने का अवसर या अवसर नहीं था, इसलिए अद्यतन किया जा रहा एकमात्र संग्रह सत्रों की सूची था। नतीजतन, एक शुरुआत के दौरान लॉकिंग पूरी तरह से अनावश्यक थी , केवल शुरुआत और अंत में, और थ्रूपुट 3000 के एक कारक द्वारा गुलाब।

अन्य सामान्य लॉकिंग परिदृश्य एक उपयोगकर्ता अनुप्रयोग के थ्रेड्स के बीच साझा किए गए संसाधन हैं। अधिकांश आधुनिक चौखटे ताले के बजाय संदेशों का उपयोग करके इसे संबोधित करते हैं; जब आप "UI थ्रेड में संक्रमण" करते हैं, तो आप वास्तव में एक फ़ंक्शन पॉइंटर और कुछ मापदंडों (या एक प्रतिनिधि और कार्यान्वयन के आधार पर एक स्टैक फ्रेम) वाले संदेश को कतारबद्ध कर रहे हैं।


6
  • एक एक्सक्लूसिव या राइट लॉक एक प्रक्रिया देता है जो फाइल के निर्दिष्ट हिस्से पर लिखने के लिए एक्सक्लूसिव एक्सेस देता है। हालांकि एक राइट लॉक जगह में है, कोई अन्य प्रक्रिया फ़ाइल के उस हिस्से को लॉक नहीं कर सकती है।

  • साझा या पढ़ा हुआ लॉक किसी अन्य प्रक्रिया को फ़ाइल के निर्दिष्ट हिस्से पर राइट लॉक का अनुरोध करने से रोकता है। हालांकि, अन्य प्रक्रियाएं रीड लॉक का अनुरोध कर सकती हैं।

उस पर और अधिक: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html


2

साथ ही डेटाबेस की ओर से सिद्धांत। ओरेकल दस्तावेज के अनुसार

अनन्य लॉक मोड संबंधित संसाधन को साझा होने से रोकता है। यह लॉक मोड डेटा को संशोधित करने के लिए प्राप्त किया जाता है। किसी संसाधन को विशेष रूप से लॉक करने वाला पहला लेन-देन एकमात्र लेनदेन है जो अनन्य लॉक जारी होने तक संसाधन को बदल सकता है।

शेयर लॉक मोड संबंधित संसाधन को साझा करने की अनुमति देता है, इसमें शामिल संचालन पर निर्भर करता है। डेटा पढ़ने वाले कई उपयोगकर्ता डेटा साझा कर सकते हैं, एक लेखक द्वारा समवर्ती पहुंच को रोकने के लिए शेयर ताले पकड़े हुए हैं (जिसे एक विशेष लॉक की आवश्यकता है)। कई लेनदेन
एक ही संसाधन पर शेयर ताले प्राप्त कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.