प्रौद्योगिकी साझेदारी

C# मध्ये Semaphore (semaphore) इत्यस्य विस्तृतव्याख्यानम् अनुप्रयोगश्च ।

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु


समवर्ती प्रोग्रामिंग् इत्यत्र समन्वयनम् एकः मूलभूतः आवश्यकता अस्ति । सेमाफोर् इति सामान्यं समन्वयनतन्त्रं यस्य उपयोगः साझासंसाधनानाम् अभिगमनं नियन्त्रयितुं भवति । C# इत्यस्मिन् System.Threading नामस्थानस्य अधः Semaphore वर्गस्य माध्यमेन सेमाफोर् कार्यान्विताः भवन्ति । अस्मिन् लेखे Semaphore तथा C# इत्यस्मिन् तस्य अनुप्रयोगानाम् विस्तरेण परिचयः भविष्यति ।

1. सेमाफोर इति किम् ?

सेमाफोर् इति पूर्णाङ्कमूल्यं यस्य उपयोगेन साझासंसाधनस्य अभिगमनं नियन्त्रयितुं शक्यते । सेमाफोरस्य उपयोगः मुख्यतया द्वयोः प्रयोजनयोः कृते भवति- १.

परस्परं विरुद्धम् : १. केवलं एकः सूत्रः एकस्मिन् समये साझासंसाधनं प्राप्तुं शक्नोति इति सुनिश्चितं कुर्वन्तु ।
गणनां कारोतु: युगपत् साझासंसाधनानाम् अभिगमनाय निश्चितसङ्ख्यायाः सूत्राणां अनुमतिं ददातु ।
प्रायः निम्नलिखितपरिदृश्येषु सेमाफोरस्य उपयोगः भवति ।

  • संसाधनानाम् समवर्ती प्रवेशं सीमितं कुर्वन्तु, यथा दत्तांशकोशसंयोजनानां संख्यां सीमितं कुर्वन्तु ।
  • उत्पादक-उपभोक्तृ-समस्यायां दत्तांशस्य पठनं लेखनं च समन्वयनम् ।
  • बहुप्रक्रियाणां मध्ये साझासंसाधनानाम् अभिगमनं समन्वययन्तु ।

2. C# मध्ये सेमाफोर वर्गः ।

C# इत्यस्मिन् Semaphore वर्गः semaphores इत्यस्य उपरि मूलभूतं कार्यं प्रदाति । सेमाफोर् निर्मातुं निम्नलिखितवाक्यविन्यासस्य उपयोगं कुर्वन्तु ।

Semaphore semaphore = new Semaphore(initialCount, maximumCount);
  • 1

initialCount: सेमाफोरस्य आरम्भिकगणनामूल्यं, यत् सेमाफोरस्य निर्माणसमये मूल्यं सूचयति ।
maximumCount: सेमाफोरस्य अधिकतमं गणनामूल्यं, यत् अधिकतमं मूल्यं सूचयति यत् सेमाफोरः प्राप्तुं शक्नोति ।

3. सेमाफोरस्य उपयोगस्य उदाहरणानि

३.१ सेमाफोर् रचयन्तु

C# इत्यस्मिन् SemaphoreSlim क्लास् इत्यस्य उपयोगेन सेमाफोर् रचयन्तु । इदं वर्गं Semaphore इत्यस्य समन्वयनसन्दर्भकार्यन्वयनम् अस्ति, यत् अधिकलचीलानि अतुल्यकालिकसञ्चालनानि प्रदाति ।

System.Threading इत्यस्य उपयोगेन;

public class सेमाफोरउदाहरण
{
private SemaphoreSlim semaphore = new SemaphoreSlim(3); // एकस्मिन् समये 3 थ्रेड्स अभिगमनस्य अनुमतिं दातुं गणना सेमाफोर रचयन्तु

public void DoWork()
{
    semaphore.Wait(); // 获取信号量,如果信号量小于0,线程将被阻塞

    try
    {
        // 执行共享资源的操作
    }
    finally
    {
        semaphore.Release(); // 释放信号量
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

}

३.२ सूत्राणां समन्वयनार्थं सेमाफोरस्य उपयोगं कुर्वन्तु

सेमाफोर् संसाधनानाम् निर्माणं, प्राप्तिः, विमोचनं च कथं करणीयम् इति दर्शयितुं निम्नलिखितम् सरलम् उदाहरणम् अस्ति ।

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        // 创建信号量,允许3个线程同时访问共享资源
        Semaphore semaphore = new Semaphore(3, 3);

        // 创建和启动线程
        for (int i = 0; i < 10; i++)
        {
            new Thread(() => Work(semaphore)).Start();
        }
    }

    static void Work(Semaphore semaphore)
    {
        try
        {
            // 获取信号量
            semaphore.WaitOne();

            // 执行共享资源的操作
            Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId} 正在执行。");
            Thread.Sleep(1000);
        }
        finally
        {
            // 释放信号量
            semaphore.Release();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

अस्मिन् उदाहरणे वयं एकं सेमाफोर् रचयामः यत् 3 थ्रेड् पर्यन्तं Work मेथड् एकत्रैव निष्पादयितुं शक्नोति । प्रत्येकं थ्रेड् semaphore.WaitOne() इति आह्वानं कुर्वन् सेमाफोर् प्राप्तुं प्रयतते । यदि सेमाफोरस्य मूल्यं 0 इत्यस्मात् अधिकं भवति तर्हि थ्रेड् निष्पादनं निरन्तरं करिष्यति । अन्यथा यावत् अन्यः सूत्रः सेमाफोरं न मुञ्चति तावत् सूत्रं अवरुद्धं भविष्यति ।

अतुल्यकालिकाः क्रियाः
SemaphoreSlim वर्गः अतुल्यकालिकप्रतीक्षाविमोचनविधयः अपि प्रदाति:

  1. await semaphore.WaitAsync(): अतुल्यकालिकरूपेण सेमाफोरस्य प्रतीक्षां कुर्वन्तु
  2. await semaphore.ReleaseAsync(): सेमाफोरम् अतुल्यकालिकरूपेण मुक्तं कुर्वन्तु

एतेन सेमाफोरस्य उपयोगः अधिकं लचीलः भवति तथा च अतुल्यकालिकप्रोग्रामिंगप्रतिमानैः सह उत्तमरीत्या एकीकृतः भवति ।

4. सारांशः

C# इत्यस्मिन् Semaphore (semaphore) इति एकं शक्तिशाली समन्वयनतन्त्रम् अस्ति यत् विकासकानां साझासंसाधनानाम् अभिगमनं नियन्त्रयितुं साहाय्यं कर्तुं शक्नोति । सेमाफोर्-इत्यस्य उपयोगेन वयं बहुविध-धागानां साझा-संसाधन-प्रवेशं प्रभावीरूपेण प्रबन्धयितुं शक्नुमः, येन सुनिश्चितं भवति यत् संसाधन-उपयोगेन दत्तांश-दौडाः अन्ये समन्वयन-समस्याः वा न भवन्ति

C# प्रोग्रामिंग् इत्यस्मिन् Semaphore इत्यस्य महत्त्वं कोडपठनीयतां परिपालनक्षमतां च निर्वाहयन् जटिलसमवर्तीनियन्त्रणतर्कं कार्यान्वितुं विकासकानां सहायतां कर्तुं तस्य क्षमतायां प्रतिबिम्बितम् अस्ति अस्य उपयोगस्य सुगमता अस्य सरल-एपिआइ-निर्माणे समृद्धे समन्वयनसन्दर्भसमर्थने च प्रतिबिम्बिता अस्ति ।

व्यावहारिकप्रयोगेषु सेमाफोरस्य उपयोगः दत्तांशकोशसंयोजनपूलस्य आकारं सीमितुं, संजालसंसाधनानाम् अभिगमनं नियन्त्रयितुं, उत्पादक-उपभोक्तृप्रतिरूपस्य समन्वयनं प्राप्तुं इत्यादिषु कर्तुं शक्यते अस्य लेखस्य परिचयस्य माध्यमेन वयम् आशास्महे यत् पाठकाः सेमाफोरस्य सिद्धान्तान् उपयोगं च अधिकतया अवगन्तुं शक्नुवन्ति तथा च वास्तविकपरियोजनासु तस्य लाभं ग्रहीतुं शक्नुवन्ति।