Sobes.tech
Junior — Middle

Ներկայացրեք, թե ինչ է սեմաֆորն ու ինչպես է այն օգտագործվում թելերի սինխրոնիզացիան կառավարելու համար։

sobes.tech AI

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

Սեմաֆորն այն primitive-ն է սինխրոնիզացիայի, որը օգտագործվում է ընդհանուր ռեսուրսին մուտքի կառավարում բազմակի հոսքերի կողմից:

Նա պարունակում է հաշվիչ, որը ցույց է տալիս, թե քանի հոսք կարող է միաժամանակ մուտք գործել ռեսուրս:

  • Եթե հաշվիչը մեծ է զրոյից, հոսքը կարող է մուտք գործել և նվազեցնել հաշվիչը 1-ով:
  • Եթե հաշվիչը զրոյ է, հոսքը բլոկվում է և սպասում է, մինչև մյուս հոսքը ազատի ռեսուրսը:

C#-ում սեմաֆորը ներկայացված է Semaphore կամ SemaphoreSlim դասերով:

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

using System;
using System.Threading;

class Program
{
    static SemaphoreSlim semaphore = new SemaphoreSlim(2); // առավելագույնը 2 հոսք միաժամանակ

    static void AccessResource(int id)
    {
        Console.WriteLine($"Հոսք {id} սպասում է մուտքին");
        semaphore.Wait(); // մուտքի պահանջ
        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();
        }
    }
}

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