.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