কম্পিউটার টিউটোরিয়াল

C#-এ থ্রেড-সেফ কনকারেন্ট কালেকশন (System.Collections.Concurrent)

.NET Framework 4.0 থেকে System.Collections.Concurrent নেমস্পেসে থ্রেড-সেফ, স্কেলেবল কালেকশন ক্লাসগুলো আসেছে। একাধিক থ্রেড একসাথে এই কালেকশনগুলো অ্যাক্সেস করতে পারে লক ছাড়াই।

প্রধান কনকারেন্ট কালেকশনসমূহ

ক্লাসবিবরণব্যবহার
ConcurrentDictionary<TKey,TValue>থ্রেড-সেফ কি-ভ্যালু স্টোরক্যাশ, লুকআপ টেবিল
ConcurrentQueue<T>থ্রেড-সেফ FIFO কিউপ্রোডিউসার-কনসিউমার
ConcurrentStack<T>থ্রেড-সেফ LIFO স্ট্যাকDFS, অন্ডো মেকানিজম
ConcurrentBag<T>অনঅর্ডার্ড, ডুপ্লিকেট-অনুমোদিতথ্রেড-লোকাল স্টোরেজ
BlockingCollection<T>বাউন্ডিং + ব্লকিং অপারেশনপাইপলাইন, ব্যাফার

ConcurrentStack উদাহরণ

using System;
using System.Collections.Concurrent;

class ConcurrentStackDemo
{
    static void Main()
    {
        ConcurrentStack<int> stack = new ConcurrentStack<int>();
        
        // Push (থ্রেড-সেফ)
        stack.Push(50);
        stack.Push(100);
        stack.Push(150);
        
        // TryPop (থ্রেড-সেফ, বুলিয়ান ফেরত দেয়)
        if (stack.TryPop(out int value))
        {
            Console.WriteLine("পপ করা মান: " + value); // 150
        }
        
        // TryPeek (রিমুভ ছাড়া দেখা)
        if (stack.TryPeek(out int peeked))
        {
            Console.WriteLine("টপ মান: " + peeked); // 100
        }
        
        Console.WriteLine("স্ট্যাক খালি কিনা: " + stack.IsEmpty);
    }
}

আউটপুট

পপ করা মান: 150
টপ মান: 100
স্ট্যাক খালি কিনা: False

গুরুত্বপূর্ণ মেথড (Try-প্যাটার্ন)

  • TryPush, TryPop, TryPeek, TryTake — ব্লক ছাড়া অপারেশন
  • বহু থ্রেডে রেস কন্ডিশন এড়াতে এই মেথডগুলো অটোমিক।

কখন কী ব্যবহার করবেন

  • FIFO কিউ দরকার → ConcurrentQueue
  • LIFO স্ট্যাক দরকার → ConcurrentStack
  • কি-ভ্যালু লুকআপ → ConcurrentDictionary
  • বাউন্ডেড বাফার + ব্লকিং → BlockingCollection
  1. জাভাতে Matcher ক্লাস কী থ্রেড-সেফ?

  2. জাভাতে Fail-Fast এবং Fail-Safe এর পার্থক্য

  3. জাভাতে কালেকশনকে থ্রেড-সেফ কীভাবে করবেন?

  4. পাইথন ডিকশনারি কি থ্রেড-সেফ (Thread-Safe)