.Net सभी एटोमिक ऑपरेशनों के लिए "इंटरलॉक्ड" क्लास नामक एक शक्तिशाली उपकरण प्रदान करता है, जिसके माध्यम से डेवलपर्स विवाद को कम कर सकते हैं और एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं।
मल्टी-थ्रेडेड एप्लिकेशन परिदृश्यों में, पारंपरिक लॉकिंग तकनीकों का उपयोग करने से कभी-कभी परमाणु संचालन के लिए प्रदर्शन में बाधा उत्पन्न हो सकती है। .Net सभी परमाणु संचालनों के लिए "इंटरलॉक्ड" क्लास नामक एक शक्तिशाली उपकरण प्रदान करता है जिसके माध्यम से डेवलपर्स विवाद को कम कर सकते हैं और एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं।
परंपरागत रूप से, जब कई थ्रेड किसी साझा संसाधन तक पहुँचते हैं, तो थ्रेड सुरक्षा सुनिश्चित करने के लिए डेवलपर्स लॉक का उपयोग करते हैं। लॉकिंग कई थ्रेड को एक साथ कोड के महत्वपूर्ण भाग में प्रवेश करने से रोकता है, इस प्रकार, यह सुनिश्चित करता है कि एक समय में केवल एक थ्रेड ही साझा संसाधन को संशोधित कर सकता है।
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 — ssukhpinder/30DayChallenge.Net
C# समुदाय का हिस्सा बनने के लिए धन्यवाद! जाने से पहले:
हमारा अनुसरण करें: Youtube | X | LinkedIn | Dev.to हमारे अन्य प्लेटफॉर्म पर जाएँ: GitHub