paint-brush
30-दिवसीय .NET चैलेंज - दिन 17: इंटरलॉक्ड क्लास टूल क्या है?द्वारा@ssukhpinder
338 रीडिंग
338 रीडिंग

30-दिवसीय .NET चैलेंज - दिन 17: इंटरलॉक्ड क्लास टूल क्या है?

द्वारा Sukhpinder Singh4m2024/04/07
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

पारंपरिक लॉकिंग तकनीकों का उपयोग करने से कभी-कभी परमाणु संचालन के लिए प्रदर्शन में बाधा उत्पन्न हो सकती है। The.Net सभी परमाणु संचालनों के लिए "इंटरलॉक्ड" क्लास नामक एक शक्तिशाली उपकरण प्रदान करता है जिसके माध्यम से डेवलपर्स विवाद को कम कर सकते हैं और एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं। 30 Day.Net चैलेंज डेवलपर्स को इंटरलॉक्ड क्लास का उपयोग करना सीखने की चुनौती देता है।
featured image - 30-दिवसीय .NET चैलेंज - दिन 17: इंटरलॉक्ड क्लास टूल क्या है?
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item

.Net सभी एटोमिक ऑपरेशनों के लिए "इंटरलॉक्ड" क्लास नामक एक शक्तिशाली उपकरण प्रदान करता है, जिसके माध्यम से डेवलपर्स विवाद को कम कर सकते हैं और एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं।

परिचय

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

सीखने के मकसद

  • ताले की समस्या
  • इंटरलॉक्ड कक्षाओं का उपयोग करना

डेवलपर्स के लिए पूर्वापेक्षाएँ

  • C# प्रोग्रामिंग भाषा की बुनियादी समझ

30 दिन का .नेट चैलेंज

शुरू करना

ताले से जुड़ी समस्या को समझना

परंपरागत रूप से, जब कई थ्रेड किसी साझा संसाधन तक पहुँचते हैं, तो थ्रेड सुरक्षा सुनिश्चित करने के लिए डेवलपर्स लॉक का उपयोग करते हैं। लॉकिंग कई थ्रेड को एक साथ कोड के महत्वपूर्ण भाग में प्रवेश करने से रोकता है, इस प्रकार, यह सुनिश्चित करता है कि एक समय में केवल एक थ्रेड ही साझा संसाधन को संशोधित कर सकता है।

 private int _counter; private readonly object _syncRoot = new object(); public void IncrementCounter() { lock (_syncRoot) { _counter++; } }

उपर्युक्त दृष्टिकोण से संभावित प्रदर्शन समस्या का जोखिम उत्पन्न होता है, जिसे विवाद कहा जाता है, जिसमें जब कई थ्रेड एक साथ लॉक तक पहुंचने का प्रयास करते हैं, तो उस थ्रेड को छोड़कर जो सफलतापूर्वक लॉक प्राप्त कर लेता है, उन्हें रोक दिया जाता है।

इंटरलॉक्ड क्लास: एक बेहतर तरीका

.NET फ्रेमवर्क सिस्टम.थ्रेडिंग नेमस्पेस के एक भाग के रूप में इंटरलॉक्ड क्लास प्रदान करता है, जिसे एटोमिक ऑपरेशन को कुशलतापूर्वक निष्पादित करने के लिए डिज़ाइन किया गया है। एटोमिक ऑपरेशन अविभाज्य हैं; वे बिना किसी रुकावट के पूरी तरह से पूरे होते हैं।

 private int _counter; public void IncrementCounter() { Interlocked.Increment(ref _counter); }

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

पूर्ण उदाहरण

IncrementClass नाम से एक नया क्लास जोड़ें, और निम्नलिखित कोड स्निपेट जोड़ें

 public static class IncrementClass { private static int _counter = 0; /// <summary> /// Outputs /// Counter value: 10 /// </summary> public static void TestIncrementCounter() { // Create an array to hold the tasks Task[] tasks = new Task[10]; // Initialize and start tasks for (int i = 0; i < tasks.Length; i++) { tasks[i] = Task.Run(() => IncrementCounter()); } // Wait for all tasks to complete Task.WaitAll(tasks); Console.WriteLine($"Counter value: {_counter}"); } public static void IncrementCounter() { // Safely increment the counter across multiple threads Interlocked.Increment(ref _counter); } }


मुख्य विधि से निम्नानुसार कॉल करें:

 #region Day 17: Increment Class IncrementClass.TestIncrementCounter(); #endregion


कंसोल आउटपुट:

 Counter value: 10

GitHub पर पूरा कोड

GitHub — ssukhpinder/30DayChallenge.Net

C# प्रोग्रामिंग🚀

C# समुदाय का हिस्सा बनने के लिए धन्यवाद! जाने से पहले:

हमारा अनुसरण करें: Youtube | X | LinkedIn | Dev.to हमारे अन्य प्लेटफॉर्म पर जाएँ: GitHub