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

C#-এ CopyOnWriteArrayList-এর বিকল্প: SynchronizedCollection

জাভার 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লক-ফ্রিলক-ফ্রিহাই-কনকারেন্সি প্রোডিউসার/কনসিউমার
  1. C#-এ কলেকশন (Collections) কী?

  2. C#-এ Deque ক্লাস

  3. জাভাতে কোন কালেকশন ক্লাসগুলো থ্রেড-সেফ

  4. জাভাতে Swing থ্রেড-সেফ কি?