মাল্টিথ্রেডেড অ্যাপ্লিকেশনে শেয়ার্ড রিসোর্সে একসাথে অ্যাক্সেস রোধ করতে সিঙ্ক্রোনাইজেশন প্রিমিটিভ ব্যবহার করা হয়। C#-এ প্রধানত lock, Mutex, Monitor, Semaphore, ThreadPool ব্যবহৃত হয়।
1. lock স্টেটমেন্ট (সর্বাধিক ব্যবহৃত)
private static readonly object _lock = new object();
public void SafeMethod()
{
lock (_lock)
{
// ক্রিটিক্যাল সেকশন — একবারে একটি থ্রেড
}
}
2. Mutex (প্রসেস-ক্রস সিঙ্ক্রোনাইজেশন)
private static Mutex _mutex = new Mutex(false, "Global\\MyAppMutex");
public void CrossProcessSync()
{
_mutex.WaitOne();
try
{
// শেয়ার্ড রিসোর্স অ্যাক্সেস
}
finally
{
_mutex.ReleaseMutex();
}
}
3. ThreadPool (পুনঃব্যবহারযোগ্য থ্রেড)
using System.Threading;
ThreadPool.QueueUserWorkItem(state =>
{
// ব্যাকগ্রাউন্ড কাজ
Console.WriteLine("ThreadPool থ্রেডে চলছে");
});
সম্পূর্ণ উদাহরণ: Mutex দিয়ে সিঙ্গল ইনস্ট্যান্স অ্যাপ
using System;
using System.Threading;
class SingleInstanceApp
{
private static Mutex _mutex = new Mutex(true, "{8F6F0AC4-B9A1-45FD-A8CF-72F04E6BDE8F}");
static void Main()
{
if (!_mutex.WaitOne(TimeSpan.Zero, true))
{
Console.WriteLine("অ্যাপ্লিকেশন ইতিমধ্যে চলছে।");
return;
}
try
{
Console.WriteLine("অ্যাপ্লিকেশন চলছে... আউট করার জন্য Enter চাপুন");
Console.ReadLine();
}
finally
{
_mutex.ReleaseMutex();
}
}
}
সারসংক্ষেপ টেবিল
| প্রিমিটিভ | ব্যবহার | স্কোপ |
|---|---|---|
| lock | সরল, ফাস্ট | প্রসেস-লোকাল |
| Mutex | নামযুক্ত, প্রসেস-ক্রস | সিস্টেম-ওয়াইড |
| Semaphore | গণনা-ভিত্তিক সিঙ্ক্রোনাইজেশন | প্রসেস/সিস্টেম |
| ThreadPool | কম দক্ষতায় থ্রেড ম্যানেজমেন্ট | প্রসেস-লোকাল |