জাভার CopyOnWriteArrayList-এর মতো থ্রেড-সেফ, রিড-হেভি কালেকশন C#-এ নেই। এর বদলে System.Collections.Generic.SynchronizedCollection<T> বা ImmutableList<T> ব্যবহার করা হয়।
SynchronizedCollection<T>
এটি একটি র্যাপার যা যেকোনো IList<T>-কে থ্রেড-সেফ করে দেয়। সব অপারেশন একটি শেয়ার্ড SyncRoot-এ লক করে।
সিনট্যাক্স
using System.Collections.Generic;
var list = new List<int>();
var syncList = new SynchronizedCollection<int>(list);
// অথবা খালি থেকে
var syncList2 = new SynchronizedCollection<int>();
প্রোপার্টি ও মেথড
| প্রোপার্টি | বিবরণ |
|---|---|
Count | এলিমেন্ট সংখ্যা |
Item[int] | ইন্ডেক্স দিয়ে অ্যাক্সেস |
Items | ইন্টারনাল লিস্ট (IList<T>) |
SyncRoot | লক অবজেক্ট (ম্যানুয়াল লকিংয়ের জন্য) |
উদাহরণ
using System;
using System.Collections.Generic;
class SyncCollectionDemo
{
static void Main()
{
var syncList = new SynchronizedCollection<string>();
syncList.Add("A");
syncList.Add("B");
// থ্রেড-সেফ এনিউমেরেশন (লক হোল্ড করে)
lock (syncList.SyncRoot)
{
foreach (var item in syncList)
Console.WriteLine(item);
}
}
}
আধুনিক বিকল্প: Immutable Collections
// NuGet: System.Collections.Immutable
using System.Collections.Immutable;
var immutableList = ImmutableList.Create(1, 2, 3);
var newList = immutableList.Add(4); // নতুন লিস্ট রিটার্ন করে, মূল অপরিবর্তিত
ImmutableList রিড-হেভি সিনেরিওর জন্য আরও পারফরম্যান্ট এবং ফাংশনাল স্টাইল সাপোর্ট করে।
তুলনা
| কলেকশন | রিড | রাইট | ব্যবহার |
|---|---|---|---|
| SynchronizedCollection | লক्ड | লক্ড | সিম্পল শেয়ার্ড স্টেট |
| ImmutableList | লক-ফ্রি | কপি-অন-রাইট | ফাংশনাল, কনকারেন্ট রিড |
| ConcurrentBag/Queue | লক-ফ্রি | লক-ফ্রি | হাই-কনকারেন্সি প্রোডিউসার/কনসিউমার |