2013-08-12 5 views
5

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

+0

आपको एक रीड लॉक की आवश्यकता है जो थ्रेड को लॉक रखने पर रोक देगा। –

उत्तर

3

.... क्या पहली जगह

पढ़ते समय में readlock की जरूरत है, तो आप एक लेखक ताला प्राप्त करने से रोकने के लिए ... जब तक सभी पाठकों समाप्त कर दिया है की जरूरत है। लेकिन यह ताला प्राप्त करने के लिए एक और पाठक के लिए ठीक है।

लेखन करते समय, आपको एक पाठक ताला प्राप्त करने से रोकने के लिए ... जब तक लेखक समाप्त हो गया है की जरूरत है।

(दूसरे शब्दों में, वहाँ एक लेखक हो सकता है, या कई पाठकों ताले पकड़े ... लेकिन दोनों नहीं।)

इस का वर्णन करने के प्रयोजनों के लिए, यह होने के रूप में व्यवहार वर्णन के लिए सहायक है दो ताले क्या वास्तव में हुड के नीचे होता है ... कार्यान्वयन विशिष्ट है।


वहाँ एक परिदृश्य जब ReadWrite ताला वास्तव में उपयोगी है?

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

3

आप कई धागे में डेटा पढ़ रहे हैं आप दृश्यता मुद्दों की वजह से आंकड़ों के नवीनतम परिवर्तन देखने के लिए नहीं की संभावना हो। ऐसी कई परतें हैं जहां डेटा प्रति-थ्रेड आधार पर कैश किया जा सकता है: सीपीयू कैश की अलग परतें, रैम एक्सेस बफर आदि। जगह पर लॉक पढ़ना है, आप सुनिश्चित हो सकते हैं कि आप हमेशा नवीनतम स्थिति देख रहे हैं।

लिखें ताले नवीनतम परिवर्तनों की दृश्यता के साथ पहुंच का एक atomicity उपलब्ध कराने और मज़बूत कर रहे हैं।

मुख्य कारण यहां ताले के विभिन्न प्रकार के लिए अन्य थ्रेड के लिए बहुत अधिक भूमि के ऊपर और ताले को शुरू करने के बिना तुल्यकालन के लिए पर्याप्त स्तर प्राप्त करने की क्षमता है।

क्या कोई परिदृश्य है जब रीडराइट लॉक वास्तव में उपयोगी होता है?

आप कुछ में स्मृति डेटा (सरणी, संग्रह या जो कुछ भी) है, जो अलग अलग धागे से एक बहुत क्वेरी की जाती है, लेकिन इस डेटा के अद्यतन काफी कम ही होता है जब यह बेहद उपयोगी है। इस मामले अलग ताले होने में (प्रश्नों के लिए ताला पढ़ सकते हैं और अद्यतन के लिए ताला बारे में) आप एक महत्वपूर्ण प्रदर्शन को लाभ दे सकता है।

1

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

संबंधित मुद्दे