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

C#-এ ReaderWriterLock ব্যবহার করা

ReaderWriterLock একটি সিঙ্ক্রোনাইজেশন প্রিমিটিভ যা একাধিক থ্রেডকে একটি রিসোর্স পড়তে (Read) দেয় একসাথে, কিন্তু লেখা (Write) সময় একসাথে শুধু একটি থ্রেড অ্যাক্সেস পায়। এটি Monitor বা lock স্টেটমেন্ট চেয়ে ভালো থ্রুপুট দেয় যখন রিসোর্স কমই পরিবর্তন হয়।

ঘোষণা এবং আরম্ভিকেশন

static ReaderWriterLock rwLock = new ReaderWriterLock();

মূল প্রপার্টিগুলো

প্রপার্টিব্যাখ্যা
IsReaderLockHeldবর্তমান থ্রেডে রিডার লক আছে কিনা জানায়
IsWriterLockHeldবর্তমান থ্রেডে রাইটার লক আছে কিনা জানায়
WriterSeqNumরাইটার সিকোয়েন্স নম্বর রিটার্ন করে

মূল মেথডগুলো

মেথডব্যাখ্যা
AcquireReaderLock(TimeSpan)রিডার লক অর্জন করে, টাইমআউট সহ
AcquireWriterLock(TimeSpan)রাইটার লক অর্জন করে, টাইমআউট সহ
ReleaseReaderLock()রিডার লক মুক্ত করে
ReleaseWriterLock()রাইটার লক মুক্ত করে
UpgradeToWriterLock(TimeSpan)রিডার লককে রাইটার লকে আপগ্রেড করে
DowngradeFromWriterLock(ref LockCookie)রাইটার লককে রিডার লকে ডাউনগ্রেড করে

ব্যবহারের উদাহরণ

using System;
using System.Threading;

public class SharedResource
{
    private ReaderWriterLock rwLock = new ReaderWriterLock();
    private int data = 0;

    // পড়ার অপারেশন - একাধিক থ্রেড একসাথে পড়তে পারে
    public int ReadData()
    {
        rwLock.AcquireReaderLock(TimeSpan.FromSeconds(5));
        try
        {
            return data;
        }
        finally
        {
            rwLock.ReleaseReaderLock();
        }
    }

    // লেখার অপারেশন - একবারে শুধু একটি থ্রেড
    public void WriteData(int value)
    {
        rwLock.AcquireWriterLock(TimeSpan.FromSeconds(5));
        try
        {
            data = value;
            Console.WriteLine($"ডেটা আপডেট হয়েছে: {value}");
        }
        finally
        {
            rwLock.ReleaseWriterLock();
        }
    }
}

সর্বোত্তম অনুশীলন (Best Practices)

  • সর্বদা try/finally ব্লকে লক রিলিজ করুন - এক্সেপশন হলে লক না রিলিজ হলে ডেডলক হতে পারে।
  • টাইমআউট ব্যবহার করুন - অনির্ধারিত ব্লকিং এড়াতে।
  • .NET Framework 4.0+ এ: ReaderWriterLockSlim ব্যবহার করুন - এটি আরও দ্রুত এবং ডেডলক-প্রতিরোধী।

ReaderWriterLockSlim উদাহরণ (সুপারিশ করা)

using System;
using System.Threading;

public class ModernResource
{
    private ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();
    private int data = 0;

    public int ReadData()
    {
        rwLock.EnterReadLock();
        try { return data; }
        finally { rwLock.ExitReadLock(); }
    }

    public void WriteData(int value)
    {
        rwLock.EnterWriteLock();
        try { data = value; }
        finally { rwLock.ExitWriteLock(); }
    }
}
নোট: ReaderWriterLock লিগ্যাসি ক্লাস। নতুন প্রজেক্টে ReaderWriterLockSlim ব্যবহার করুন।
  1. উইন্ডোজ ১০ লক স্ক্রিনে কর্টানা সক্ষম ও ব্যবহার করুন

  2. অ্যান্ড্রয়েডে স্মার্ট লক সেট আপ ও ব্যবহার করার পদ্ধতি

  3. উইন্ডোজ ১০-এ ডাইনামিক লক সক্রিয় করুন: পিসি সুরক্ষার সহজ পদ্ধতি

  4. উইন্ডোজ ১০-এ Fn কী লক মাস্টার করুন: ধাপে ধাপে গাইড