c# - Is there a best practice to implement static function that gives unique value on simultaneous access -


एक स्थिर कार्य retUnique () एक अनन्य मान देता है मेरा प्रश्न यह है कि यदि कई उपयोगकर्ता हैं जो किसी भी समय एक ही समारोह का उपयोग कर रहे हैं, तो क्या होता है? क्या यह सुनिश्चित करने के लिए एक सर्वोत्तम अभ्यास है कि प्रत्येक उपयोगकर्ता इस स्थैतिक फ़ंक्शन को एक साथ मिलकर एक अनूठा मूल्य प्राप्त कर लेते हैं और थ्रेडिंग समस्याओं का सामना नहीं करते हैं।

क्या आप मुझे एक उदाहरण दे सकते हैं?

यह मानते हुए कि आप बस वापस लौटना चाहते हैं अद्वितीय बढ़ते पूर्णांक मान, सबसे सुरक्षित सुरक्षित तरीका शायद एक निजी स्थिर काउंटर और एक निजी स्थिर ताला ऑब्जेक्ट का उपयोग करना है। ऐसा कुछ:

<प्री> निजी स्थिर इंट s_UniqueCounter; // डिफ़ॉल्ट रूप से 0 पर प्रारंभ होता है, केवल निजी स्थिर पढ़ने के लिए ऑब्जेक्ट s_UniqueCounterLock = new object (); सार्वजनिक स्थिर ग GetUnique () {ताला (s_UniqueCounterLock) {s_UniqueCounter ++; वापसी s_UniqueCounter; }}

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

  आंतरिक स्थिर इंट क्वेरी अनियिकता () // या यह निजी या सार्वजनिक हो सकता है {lock (s_UniqueCounterLock ) {वापसी s_UniqueCounter; }}  

Comments