.নেট সমস্ত পারমাণবিক ক্রিয়াকলাপের জন্য "ইন্টারলকড" ক্লাস নামে একটি শক্তিশালী সরঞ্জাম সরবরাহ করে যার মাধ্যমে বিকাশকারীরা বিরোধ কমাতে এবং অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করতে পারে।
মাল্টি-থ্রেডেড অ্যাপ্লিকেশন পরিস্থিতিতে, ঐতিহ্যগত লকিং কৌশল ব্যবহার করা কখনও কখনও পারমাণবিক ক্রিয়াকলাপের জন্য কর্মক্ষমতা বাধা সৃষ্টি করতে পারে। .নেট সমস্ত পারমাণবিক ক্রিয়াকলাপের জন্য "ইন্টারলকড" ক্লাস নামে একটি শক্তিশালী সরঞ্জাম সরবরাহ করে যার মাধ্যমে বিকাশকারীরা বিরোধ কমাতে এবং অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করতে পারে।
ঐতিহ্যগতভাবে, একাধিক থ্রেড যখন একটি শেয়ার্ড রিসোর্স অ্যাক্সেস করে তখন থ্রেডের নিরাপত্তা নিশ্চিত করতে, ডেভেলপাররা লক ব্যবহার করে। লকিং একাধিক থ্রেডকে একই সাথে কোডের একটি গুরুত্বপূর্ণ বিভাগে প্রবেশ করতে বাধা দেয়, এইভাবে, নিশ্চিত করে যে একটি সময়ে শুধুমাত্র একটি থ্রেড ভাগ করা সম্পদ পরিবর্তন করতে পারে।
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# সম্প্রদায়ের অংশ হওয়ার জন্য আপনাকে ধন্যবাদ! তুমি ত্যাগ করার পূর্বে:
আমাদের অনুসরণ করুন: ইউটিউব | এক্স | লিঙ্কডইন | Dev.to আমাদের অন্যান্য প্ল্যাটফর্মে যান: GitHub