2009-08-24 7 views
7

तत्कालता के दौरान नहीं, लेकिन एक बार सिंगलटन ऑब्जेक्ट का त्वरण किया जाता है, तो क्या होगा यदि दो या दो से अधिक थ्रेड एक ही सिंगलटन ऑब्जेक्ट तक पहुंचने का प्रयास कर रहे हों? खासकर उस मामले में जहां सिंगलटन ऑब्जेक्ट अनुरोध को संसाधित करने में बहुत समय लगता है (1 मिनट कहें) ... इस मामले में, यदि पूर्व के लिए, 5 थ्रेड एक ही सिंगलटन ऑब्जेक्ट तक पहुंचने का प्रयास करते हैं, तो परिणाम क्या होगा?क्या होता है यदि एक से अधिक धागे सिंगलटन ऑब्जेक्ट को एक्सेस करने का प्रयास करते हैं

अतिरिक्त प्रश्न: आम तौर पर जब हमें सिंगलटन पैटर्न के लिए जाना चाहिए और हमें इसे कब से बचना चाहिए?

+1

आपके प्रश्न का उत्तर यह है कि, "यह वास्तव में निर्भर करता है"। किस तरह का सिंगलटन? यानी यह क्या करता है, और यह कैसे करता है? और किस भाषा में? –

उत्तर

5

जब तक सिंगलटन के भीतर सिंक्रनाइज़ेशन (लॉकिंग) नहीं किया जा रहा है, तो जवाब यह है: यह एक मुफ़्त है।

हालांकि सिंगलटन यह सुनिश्चित करता है कि अनुरोध किए जाने पर किसी ऑब्जेक्ट का केवल एक उदाहरण उपयोग किया जाता है, पैटर्न स्वयं अंतर्निहित थ्रेड सुरक्षा प्रदान नहीं करता है। यह कार्यान्वयन करने के लिए छोड़ दिया गया है।

आपके द्वारा उद्धृत विशिष्ट मामले में (लंबी चलने वाली विधि के साथ), कक्षा या ऑब्जेक्ट-स्तरीय चर का उपयोग करने वाली किसी भी विधि तक पहुंच को सिंक्रनाइज़ करना महत्वपूर्ण होगा। ऐसा करने में विफलता, सभी संभावनाओं में, दौड़ की स्थिति का कारण बनती है।

शुभकामनाएं!

+0

खैर, अधिक आम तौर पर, सिंगलटन को थ्रेडसेफ होना चाहिए। लॉकिंग एक संभावना है लेकिन यह स्टेटलेस है। –

0

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

0

आपके प्रश्न का उत्तर यह है कि, "यह वास्तव में निर्भर करता है"। किस तरह का सिंगलटन? यानी यह क्या करता है, और यह कैसे करता है? और किस भाषा में?

वास्तविकता यह है कि सिंगलटन पटर) n केवल निर्देशित करता है और लागू करता है कि आप केवल एक निश्चित वस्तु का एक उदाहरण प्राप्त कर सकते हैं। अपने आप में यह ऑब्जेक्ट तक पहुंचने वाले एकाधिक धागे के बारे में कुछ भी नहीं कहता है।

तो, यदि सही कोड (थ्रेड सिंक्रनाइज़ेशन सही ढंग से लागू किया गया है) के साथ कोई कारण नहीं है कि इसे सही ढंग से व्यवहार नहीं करना चाहिए - भले ही ऑब्जेक्ट के अनुरोधों को संसाधित करने में वास्तव में लंबा समय लगे!

2

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

0

फिर आपको सिंगलटन पैटर्न के थ्रेड सुरक्षित कार्यान्वयन की आवश्यकता है।

this आलेख उपयोगी है जो सिंगलटन पैटर्न के बहु-थ्रेडिंग परिदृश्य का वर्णन करता है।

एचटीएच!

+0

ध्यान दें कि लिंक-केवल उत्तर निराश हो जाते हैं, इसलिए SO समाधान एक समाधान के लिए खोज का अंत बिंदु होना चाहिए (बनाम अभी तक संदर्भों का एक और स्टॉपओवर, जो समय के साथ पुराना हो जाता है)। लिंक को संदर्भ के रूप में रखते हुए, यहां स्टैंड-अलोन सारांश जोड़ना पर विचार करें। – kleopatra

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