Sobes.tech
Junior — Middle

Կարող եք բացատրել, թե ինչ է սեմաֆորն ու ինչպես է այն օգտագործվում ռեսուրսների մուտքը վերահսկելու համար?

sobes.tech AI

Պատասխան AI-ից

Սեմաֆորն այն մեխանիզմն է սինխրոնիզացիայի, որը օգտագործվում է ընդհանուր ռեսուրսին մուտքի վերահսկման համար բազմատող ծրագրերում: Այն պարունակում է հաշվիչ, որը ցույց է տալիս, թե քանի թել կարող է միաժամանակ մուտք ունենալ ռեսուրս:

Աշխատանքի սկզբունքը՝

  • Սկզբում հաշվիչը սահմանվում է հասանելի ռեսուրսների թվին (օրինակ՝ 3):
  • Երբ թելը ցանկանում է մուտք գործել, նա կանչում է Wait (կամ WaitOne C#-ում), որը նվազեցնում է հաշվիչը 1-ով:
  • Եթե հաշվիչը դառնում է փոքր, քան զրոն, թելը բլոկվում է և սպասում է, մինչև ռեսուրսը ազատվի:
  • Երբ թելը ազատում է ռեսուրսը, նա կանչում է Release, որը մեծացնում է հաշվիչը և բացում սպասող թելերը:

C#-ի օրինակ՝

using System;
using System.Threading;

class Program
{
    static Semaphore semaphore = new Semaphore(3, 3); // առավելագույնը 3 թել միաժամանակ

    static void AccessResource(int id)
    {
        Console.WriteLine($"Թել {id} սպասում է մուտքին");
        semaphore.WaitOne(); // մուտքի պահանջ
        Console.WriteLine($"Թել {id} ստացել է մուտքը");
        Thread.Sleep(1000); // աշխատանք ռեսուրսով
        Console.WriteLine($"Թել {id} ազատում է ռեսուրսը");
        semaphore.Release(); // ռեսուրսի ազատում
    }

    static void Main()
    {
        for (int i = 1; i <= 5; i++)
        {
            int localId = i;
            new Thread(() => AccessResource(localId)).Start();
        }
    }
}

Այսպիսով, սեմաֆորը սահմանափակում է միաժամանակ ռեսուրսի հետ աշխատող թելերի քանակը, կանխում է մրցակցային պայմանները և ապահովում ճիշտ աշխատանքը։