2008-12-01 15 views
7

मेरे पास आईआईएस के तहत चल रहा एक एएसपी.NET वेबपृष्ठ है जो एक एकल असेंबली का उपयोग करता है जिसमें सिंगलटन क्लास होता है। क्या मुझे सिंगलटन पर लॉकिंग तंत्र को थ्रेड-सुरक्षित बनाने के लिए कार्यान्वित करना चाहिए? या, क्या वेबसर्वर से कोई कनेक्शन सिंगलटन के समान उदाहरण का उपयोग करेगा?आईआईएस में सिंगलटन कक्षाएं थ्रेड-सुरक्षित हैं?

उम्मीद है कि मैं यह सुसंगत रूप से पूछ रहा हूं।

उत्तर

2

.NET सिंगलेट्स के लिए सामान्य पैटर्न प्रति ऐप डोमेन एक एकल उदाहरण बनाता है। एएसपीनेट में सामान्य स्थिति यह है कि आपके पास एक ही ऐप डोमेन के माध्यम से कई थ्रेड चल रहे हैं। इसका मतलब है कि आप एक ही समय में अपने सिंगलटन में कोड चलाने वाले कई थ्रेड कोड कर सकते हैं।

आपको सिंगलटन की जांच करना है और अपनी क्षमताओं का सर्वोत्तम निर्धारण करना है (koffreflectorkoff) यदि यह थ्रेड सुरक्षित है या नहीं। यदि यह साझा संसाधनों को रखता है और संशोधित करता है, या यदि यह विधि कॉल के बीच संग्रहीत किसी प्रकार की स्थिति को समाहित करता है, तो सावधान रहें।

हो सकता है कि आप सिंगलटन को दूसरे सिंगलटन में लपेटना चाहें जो उस पर कॉल करने से पहले ताले का उपयोग करता है जिस पर आपका नियंत्रण नहीं है। इस तरह आप एकल लॉक का उपयोग करके सिंगलटन को प्रत्येक कॉल को अवरुद्ध करने के बजाय लॉकिंग पर बेहतर नियंत्रण प्राप्त कर सकते हैं। यह आपको थ्रेडिंग कोड के स्थान को केंद्रीकृत करने का लाभ भी देगा ...

2

यदि यह एक स्थिर सिंगलटन है ... नहीं, यह थ्रेड सुरक्षित नहीं है। इसे पर सभी धागे साझा किए गए हैं जो ऐप के उस उदाहरण को मार रहे हैं (इसलिए बहु-अनुरोध इसे साझा करेंगे)।

हालांकि, आप इसका उपयोग कर रहे हैं, इसके लिए शायद थ्रेड सुरक्षा की आवश्यकता नहीं है।

0

.NET में ताले का उपयोग किये बिना Thread-safe Singleton लागू करना संभव है।

+0

-1। यदि आवश्यक हो तो विधियों को ताले रखने की आवश्यकता होगी। यह लिंक उन विवरणों में नहीं मिलता है (केवल सिंगलटन क्लास को बनाने के तरीके के बारे में, इसकी कार्यक्षमता नहीं)। –

+0

+1। यह टिप्पणी -1 के लायक नहीं है। दरअसल, विधियों को ताले की आवश्यकता हो सकती है, लेकिन यह सिंगलटन पैटर्न स्वयं आईएमओ के कार्यान्वयन से अलग है। – Ben

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