2013-02-16 145 views
7

हाल ही में, एक साक्षात्कार में मुझे परिपत्र कतार का उपयोग करने के नुकसान से पूछा गया था। मैं किसी के बारे में नहीं सोच सका। इंटरनेट खोजना मुझे मिला एकमात्र उत्तर यह है कि रैखिक कतार से लागू करना मुश्किल है :)। क्या कोई अन्य नुकसान है?परिपत्र कतार का नुकसान?

+0

कार्यान्वयन के आधार पर, आपको एक गोलाकार कतार में एक नोड खाली छोड़ना पड़ सकता है जबकि एक रैखिक कतार सीए पूरी तरह से भर जाती है। कोई नुकसान नहीं, जब तक कि प्रत्येक नोड विशाल नहीं है! – asheeshr

+0

क्यों नोड को खाली छोड़ना है? –

+0

यह इस बात पर निर्भर करता है कि आप परिपत्र कतार को कैसे कार्यान्वित करते हैं। यदि आप प्रत्येक नोड में डेटा स्टोर करते हैं, तो खाली और पूर्ण सूची के बीच अंतर करने का कोई आसान तरीका नहीं है। – asheeshr

उत्तर

0

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

+0

फिर फिर, गणना के दौरान किसी भी प्रकार की सूची का उपयोग करने के लिए आमतौर पर खतरे होते हैं। उदाहरण के लिए, एक नियमित लिंक्ड सूची की पूंछ हटा दी जा सकती है और सिर पर ले जाया जा सकता है (कतारों से निपटने के दौरान असामान्य नहीं), जो एक इटरेटर को तोड़ सकता है। – nneonneo

+0

क्या यह एकाधिक प्रक्रियाओं के बीच साझा स्मृति के मामले में नहीं होगा? मैं पूछता हूं कि आप स्पष्ट रूप से * थ्रेड * – asheeshr

+0

@AshRj हां का उल्लेख करते हैं, यह निश्चित रूप से कई प्रक्रियाओं के साथ हो सकता है। –

1

मैं कहूंगा कि एक गोलाकार कतार के लिए सबसे बड़ा नुकसान यह है कि आप केवल कतार। लम्बाई तत्वों को स्टोर कर सकते हैं। यदि आप इसे बफर के रूप में उपयोग कर रहे हैं, तो आप अपनी इतिहास गहराई को सीमित कर रहे हैं।

एक और छोटा नुकसान यह है कि अतिरिक्त जानकारी को बनाए रखने के बिना एक पूर्ण कतार से खाली कतार बताना मुश्किल है।

+0

इतना मुश्किल नहीं है। प्रश्न पर टिप्पणियां देखें। ऐसा करने के कम से कम 2 तरीके हैं ... –

1

साक्षात्कारकर्ता जो खोज रहा था वह उत्तर शायद कुछ अतिरिक्त संदर्भों पर निर्भर करता है जो उपरोक्त प्रश्न में नहीं हैं।

उदाहरण के लिए, प्रायः सर्कुलर कतार अत्यधिक समवर्ती उत्पादक/उपभोक्ता प्रणालियों के लिए विचार किया जाता है। जब कतार भर जाती है, कतार के आगे और पीछे के संचालन समान कैश लाइनों के लिए संघर्ष कर सकते हैं, और यह इस तरह के संदर्भों में एक समस्या हो सकती है।

या शायद साक्षात्कारकर्ता चाहता था कि आप एक कचरा-संग्रहित कतार बनाने के लिए कचरा-एकत्रित भाषा में कितना आसान हो, एक परिपत्र सरणी-आधारित कतार की तुलना में।

या शायद यह है कि आप अपनी भाषा द्वारा प्रदान किए गए वेक्टर कंटेनर का बेहतर उपयोग कैसे कर सकते हैं यदि आप एक गोलाकार कतार के बजाय आवधिक स्थानांतरण के साथ रैखिक कतार का उपयोग करते हैं।