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

C#-এ Mutex ক্লাস: ইন্টারপ্রসেস সিঙ্ক্রোনাইজেশন

Mutex (Mutual Exclusion) হল একটি সিঙ্ক্রোনাইজেশন প্রিমিটিভ যা একাধিক প্রসেস বা থ্রেডের মধ্যে শেয়ার্ড রিসোর্সে একসাথে অ্যাক্সেস রোধ করে। এটি কার্নেল-লেভেল অবজেক্ট, তাই প্রসেস-ক্রস কাজ করে।

কনস্ট্রাক্টর ও ভেরিয়েন্ট


// বেসিক
Mutex m = new Mutex();

// প্রাথমিক ওনারশিপসহ
Mutex m = new Mutex(true);

// নামযুক্ত মিউটেক্স (প্রসেস-ক্রসের জন্য)
Mutex m = new Mutex(false, "Global\\MyNamedMutex");

মূল মেথড

  • WaitOne() — অপারেশন ব্লক করে যতক্ষণ না মিউটেক্স ফ্রি হয়।
  • WaitOne(timeout) — টাইমআউটসহ ব্লক।
  • ReleaseMutex() — মিউটেক্স রিলিজ করে।

সম্পূর্ণ উদাহরণ: সিঙ্গল-ইনস্ট্যান্স অ্যাপ্লিকেশন

using System;
using System.Threading;

class MutexSingleInstanceDemo
{
    private static Mutex _mutex = new Mutex(true, "Global\\MyUniqueAppId-{GUID}");
    
    public static void Main()
    {
        // চেষ্টা করুন মিউটেক্স অধিকার পাওয়ার
        if (!_mutex.WaitOne(TimeSpan.Zero, true))
        {
            Console.WriteLine("অ্যাপ ইতিমধ্যে চলছে। আউট হচ্ছে...");
            return;
        }
        
        try
        {
            Console.WriteLine("অ্যাপ্লিকেশন চলছে। আউট করার জন্য Enter চাপুন...");
            Console.ReadLine();
        }
        finally
        {
            _mutex.ReleaseMutex();
        }
    }
}

আউটপুট (দ্বিতীয় ইনস্ট্যান্স রান করলে)


অ্যাপ ইতিমধ্যে চলছে। আউট হচ্ছে...

Mutex vs lock

ফিচারlockMutex
স্কোপপ্রসেস-লোকালসিস্টেম-ওয়াইড (নামযুক্ত)
পারফরম্যান্সফাস্ট (ইউজার-মোড)স্লোয়ার (কার্নেল ট্রানজিশন)
অবন্দন ডিটেকশননাহ্যাঁ (AbandonedMutexException)

সতর্কতা

  • নামের সাথে Global\\ প্রিফিক্স দিয়ে সিস্টেম-ওয়াইড ভিজিবিলিটি নিশ্চিত করুন।
  • এক্সেপশন হলে finally ব্লকে ReleaseMutex কল করুন।
  • অবন্দনড মিউটেক্স হলে AbandonedMutexException হ্যান্ডেল করুন।
  1. C#-এ Hashtable ক্লাসের Values প্রোপার্টি

  2. C#-এ ক্লাস (Classes) কী?

  3. C#-এ BitArray ক্লাসের Count প্রোপার্টি কী?

  4. C#-এ SortedList ক্লাসের Capacity প্রোপার্টি কী?