Sobes.tech
Middle+

Ի՞նչ է Semaphore սինխրոնիզացիայի primitive-ը։

sobes.tech AI

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

Semaphore — սա սինխրոնիզացիայի primitive է, որը կառավարում է սահմանափակ ռեսուրսների պուլին մուտքը։ Այն պահպանում է հաշվիչ, որը որոշում է, թե քանի հոսք կարող է միաժամանակ մուտք գործել ռեսուրս։

Հիմնական գործողություններ՝

  • WaitOne (կամ WaitAsync ասինխրոն կոդի համար): Կրճատում է հաշվիչը, եթե այն մեծ է զրոյից։ Եթե հաշվիչը զրոյ է, հոսքը բլոկվում է մինչև որ հաշվիչը դառնա դրական (մյուս հոսքը կանչում է Release
  • Release: Ավելացնում է հաշվիչը և կարող է բացել սպասող հոսքը։

Semaphore տեսակներ՝

  • Semaphore: Սիստեմային (անունով կամ անվան), կարող է օգտագործվել պրոցեսների միջև։
  • SemaphoreSlim: Լայնաշերտ իրագործում, նախատեսված է օգտագործելու պրոցեսի ներսում։ Առաջադիմում է ներ-պրոցեսային սինխրոնիզացիայի համար։

Օրինակ SemaphoreSlim-ի օգտագործման՝

// semaphoreSlim կարող է օգտագործվել սահմանափակելու համար միաժամանակ մուտքը ռեսուրսին
// Այս դեպքում թույլատրվում է 2 հոսք միաժամանակ
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Հետաձգում է սեմաֆորի ազատ արձակումը
    await semaphoreSlim.WaitAsync();
    try
    {
        // Մուտք սահմանափակ ռեսուրս
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} մուտք է գործում ռեսուրս");
        await Task.Delay(1000); // Աշխատանքի սիմուլյացիա ռեսուրսով
    }
    finally
    {
        // Ազատում է սեմաֆորը
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} ռեսուրսը ազատ է արձակում");
        semaphoreSlim.Release();
    }
}