Semaphore ক্লাস আপনাকে একটি ক্রিটিক্যাল সেকশনে অ্যাক্সেস থাকা থ্রেডের সংখ্যার লিমিট সেট করতে দেয়। এই ক্লাসটি রিসোর্সের একটি পুলে অ্যাক্সেস কন্ট্রোল করতে ব্যবহৃত হয়। System.Threading.Semaphore সেমাফোরের নেমস্পেস কারণ এতে সেমাফোর ইমপ্লিমেন্ট করার জন্য প্রয়োজনীয় সকল মেথড এবং প্রপার্টি থাকে।
C#-এ সেমাফোর ব্যবহার করতে, আপনাকে শুধু একটি Semaphore অবজেক্ট ইনস্ট্যানসিয়েট করতে হবে। এর ন্যূনতম দুটি আর্গুমেন্ট থাকে:
রেফারেন্স
MSDN
| Sr.No. | Constructor & Description |
|---|---|
| 1 | Semaphore(Int32, Int32) Semaphore ক্লাসের নতুন ইনস্ট্যান্স ইনিশিয়ালাইজ করে, ইনিশিয়াল এন্ট্রির সংখ্যা এবং সর্বোচ্চ কনকারেন্ট এন্ট্রি নির্দিষ্ট করে। |
| 2 | Semaphore(Int32, Int32, String) সিস্টেম সেমাফোর অবজেক্টের নাম ঐচ্ছিকভাবে নির্দिष्ट করে। |
| 3 | Semaphore(Int32, Int32, String, Boolean) নতুন সিস্টেম সেমাফোর তৈরি হয়েছে কিনা তা নির্দেশ করে একটি ভেরিয়েবল নির্দিষ্ট করে। |
এখন একটি উদাহরণ দেখি:
এখানে আমরা নিচের সেমাফোর কনস্ট্রাক্টর ব্যবহার করেছি যা সর্বোচ্চ কনকারেন্ট এন্ট্রি এবং ঐচ্ছিকভাবে কিছু এন্ট্রি রিজার্ভ করে সেমাফোর ক্লাসের নতুন ইনস্ট্যান্স ইনিশিয়ালাইজ করে।
static Semaphore semaphore = new Semaphore(2, 2);
উদাহরণ
using System;
using System.Threading;
namespace Program
{
class Demo
{
static Thread[] t = new Thread[5];
static Semaphore semaphore = new Semaphore(2, 2);
static void DoSomething()
{
Console.WriteLine("{0} = waiting", Thread.CurrentThread.Name);
semaphore.WaitOne();
Console.WriteLine("{0} begins!", Thread.CurrentThread.Name);
Thread.Sleep(1000);
Console.WriteLine("{0} releasing...", Thread.CurrentThread.Name);
semaphore.Release();
}
static void Main(string[] args)
{
for (int j = 0; j < 5; j++)
{
t[j] = new Thread(DoSomething);
t[j].Name = "thread number " + j;
t[j].Start();
}
Console.Read();
}
}
}
আউটপুট
thread number 2 = waiting thread number 0 = waiting thread number 3 = waiting thread number 1 = waiting thread number 4 = waiting thread number 2 begins! thread number 1 begins! thread number 2 releasing... thread number 1 releasing... thread number 4 begins! thread number 3 begins! thread number 4 releasing... thread number 0 begins! thread number 3 releasing... thread number 0 releasing...