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
| ফিচার | lock | Mutex |
|---|---|---|
| স্কোপ | প্রসেস-লোকাল | সিস্টেম-ওয়াইড (নামযুক্ত) |
| পারফরম্যান্স | ফাস্ট (ইউজার-মোড) | স্লোয়ার (কার্নেল ট্রানজিশন) |
| অবন্দন ডিটেকশন | না | হ্যাঁ (AbandonedMutexException) |
সতর্কতা
- নামের সাথে
Global\\প্রিফিক্স দিয়ে সিস্টেম-ওয়াইড ভিজিবিলিটি নিশ্চিত করুন। - এক্সেপশন হলে
finallyব্লকেReleaseMutexকল করুন। - অবন্দনড মিউটেক্স হলে
AbandonedMutexExceptionহ্যান্ডেল করুন।